Tiniest2D के साथ 2D गेम बनाएं
टकराव और भौतिकी
Lesson 9 of 11 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
टकराव प्रणाली
यह कैसे काम करता है
- हर वस्तु का AABB (Axis-Aligned Bounding Box) उसके स्प्राइट के आकार के आधार पर होता है
- स्प्राइट कस्टम कोलाइडर सीमाएँ रख सकते हैं (स्प्राइट संपादक में सेट करें)
- गतिशील वस्तुओं के लिए हर फ़्रेम पर टकराव की जांच की जाती है
टकराव प्रकार समझाया
- कोई नहीं - वस्तु को पूरी तरह से टकराव प्रणाली द्वारा अनदेखा किया जाता है
- स्थिर - अचल दीवार के रूप में कार्य करता है (भूमि, प्लेटफार्मों के लिए उपयोग करें)
- गतिशील - अन्य कोलाइडरों से धक्का लगता है (खिलाड़ी, दुश्मनों के लिए उपयोग करें)
- ट्रिगर - ओवरलैप का पता लगाता है लेकिन गति को ब्लॉक नहीं करता (संग्रहणीय वस्तुएँ, क्षेत्र के लिए उपयोग करें)
टकराव समाधान
- गतिशील वस्तुओं को स्वचालित रूप से स्थिर और अन्य गतिशील वस्तुओं से धकेला जाता है
- ट्रिगर्स कभी भी गति को ब्लॉक नहीं करते - वे केवल ओवरलैप का पता लगाते हैं
onCollision कॉलबैक
जब वस्तुएँ ओवरलैप होती हैं, तो onCollision(objA, objB) फ़ंक्शन को कॉल किया जाता है। कॉलबैक पैटर्न हैं:
| objA प्रकार | objB प्रकार | कॉलबैक उत्पन्न हुआ? | नोट्स |
|---|---|---|---|
| गतिशील | स्थिर | हाँ | गतिशील को स्थिर से धकेला गया |
| गतिशील | गतिशील | हाँ (दोनों दिशाओं में) | दोनों वस्तुओं को कॉलबैक मिलते हैं |
| गतिशील | ट्रिगर | हाँ | ट्रिगर का पता चला |
| ट्रिगर | ट्रिगर | हाँ | दोनों ट्रिगर एक-दूसरे का पता लगाते हैं |
| स्थिर | स्थिर | नहीं | स्थिर कॉलबैक उत्पन्न नहीं करते |
| स्थिर | ट्रिगर | नहीं | कोई भी कॉलबैक उत्पन्न नहीं करता |
मुख्य नियम:
objAहमेशा या तो गतिशील या ट्रिगर होता है- जब दो गतिशील वस्तुएँ टकराती हैं, तो दोनों को एक कॉलबैक मिलता है (प्रत्येक एक objA के रूप में)
- जब दो ट्रिगर्स ओवरलैप करते हैं, तो एक कॉलबैक उत्पन्न होता है (पहला ट्रिगर objA के रूप में)
- स्थिर वस्तुएँ कभी objA के रूप में नहीं दिखतीं
उदाहरण: विभिन्न टकराव प्रकारों का पता लगाना
func onCollision(objA, objB) {
var typeA = getCollisionType(objA)
var typeB = getCollisionType(objB)
// खिलाड़ी (गतिशील) एक सिक्के (ट्रिगर) को छू रहा है
if (getName(objA) == "player" && typeB == COLLISION_TRIGGER()) {
print("संग्रहित किया!")
removeObject(gameScene, objB)
}
// दो ट्रिगर्स ओवरलैप कर रहे हैं (उदाहरण के लिए, डिटेक्शन जोन)
if (typeA == COLLISION_TRIGGER() && typeB == COLLISION_TRIGGER()) {
print(getName(objA) + " ने " + getName(objB) + " का क्षेत्र में प्रवेश किया")
}
// खिलाड़ी द्वारा दुश्मन द्वारा मारा गया (दोनों गतिशील)
if (getName(objA) == "player" && getName(objB) == "enemy") {
print("खिलाड़ी मारा गया!")
}
}
भौतिकी प्रणाली
Tiniest Engine में एक अंतर्निहित भौतिकी प्रणाली है जो गतिशील वस्तुओं के लिए स्वचालित रूप से गुरुत्वाकर्षण और गति को संभालती है।
भौतिकी कैसे काम करती है
हर फ़्रेम में, इंजन स्वचालित रूप से:
- प्रत्येक गतिशील वस्तु की गति पर दृश्य का गुरुत्वाकर्षण लागू करता है
- प्रत्येक गतिशील वस्तु की स्थिति पर गति लागू करता है
// भौतिकी पाइपलाइन (स्वचालित रूप से इंजन द्वारा संभालने के लिए):
velocity += gravity * dt
position += velocity * dt
गुरुत्वाकर्षण सेट करना
गतिशील वस्तुओं को गिराने के लिए दृश्य पर गुरुत्वाकर्षण सेट करें:
func start() {
// नीचे की ओर गुरुत्वाकर्षण सेट करें (300 पिक्सेल प्रति सेकंड स्क्वायर)
setGravityY(gameScene, 300)
// वैकल्पिक: क्षैतिज गुरुत्वाकर्षण (हवा का प्रभाव)
setGravityX(gameScene, 0)
setScene(gameScene)
}
गति का उपयोग
वस्तुओं को सीधा स्थिति सेट करने के बजाय गति का उपयोग करके नियंत्रित करें:
var player = Object("player")
var jumpForce = -200 // नकारात्मक = उपर की ओर
func start() {
setCollisionType(player, COLLISION_DYNAMIC())
addObject(gameScene, player)
setGravityY(gameScene, 300)
setScene(gameScene)
}
func onUpdate(dt) {
// गतिशीलता के माध्यम से क्षैतिज गति
if (isKeyHeld(KEY_LEFT())) {
setVelocityX(player, -100)
} else if (isKeyHeld(KEY_RIGHT())) {
setVelocityX(player, 100)
} else {
setVelocityX(player, 0)
}
// ऊपर की ओर गति सेट करके कूदें
if (isKeyPressed(KEY_SPACE())) {
setVelocityY(player, jumpForce)
}
}
भौतिकी कार्य
| कार्य | विवरण |
|---|---|
getVelocityX(obj) |
वस्तु की X गति लौटाता है |
setVelocityX(obj, vx) |
वस्तु की X गति सेट करता है |
getVelocityY(obj) |
वस्तु की Y गति लौटाता है |
setVelocityY(obj, vy) |
वस्तु की Y गति सेट करता है |
getGravityX(scene) |
दृश्य का गुरुत्वाकर्षण X घटक लौटाता है |
setGravityX(scene, gx) |
दृश्य का गुरुत्वाकर्षण X घटक सेट करता है |
getGravityY(scene) |
दृश्य का गुरुत्वाकर्षण Y घटक लौटाता है |
setGravityY(scene, gy) |
दृश्य का गुरुत्वाकर्षण Y सेट करता है (सकारात्मक = नीचे) |
महत्वपूर्ण: केवल COLLISION_DYNAMIC() वस्तुएँ गुरुत्वाकर्षण से प्रभावित होती हैं और स्वचालित रूप से उनकी गति लागू की जाती है।