2013-03-11 5 views
11

ठीक है, मैं कैनवास और जावास्क्रिप्ट का उपयोग कर एक साइड स्क्रॉलिंग एंडलेस स्पेस थीम्ड गेम बना रहा हूं। मैं बस ऊपर और नीचे तीर का उपयोग कर एक स्पेसशिप को नियंत्रित कर रहा हूं और मैं किसी तरह के आंदोलन को आसान बनाना चाहता हूं ताकि जब मैं चाबियाँ छोड़ दूं तो जहाज सिर्फ तब तक नहीं रुकता है। मैं चारों ओर देखा है और कुछ भी मेरे अपने प्रयास अभी काम नहीं कर रहे प्लस नहीं मिला है, यह मैं क्या कोशिश की है है ...कुंजीपटल नियंत्रण का उपयोग कर कैनवास गेम में चिकना चरित्र आंदोलन

Jet.prototype.checkDirection = function() { 
if (this.isUpKey) { 
    this.drawY -= this.speed; 
    if (this.speed < 5) { 
     this.speed += 0.1; 
    } 
} 
if (this.isDownKey) { 
    this.drawY += this.speed; 
    if (this.speed < 5) { 
     this.speed += 0.1; 
    } 
} 
if (!this.isUpKey) { 
    if (!this.isDownKey) { 
     if (this.speed >= 0) { 
      this.drawY -= this.speed; 
      this.speed -= 1; 
     } 
    } 
} 
if (!this.isDownKey) { 
    if (!this.isUpKey) { 
     if (this.speed >= 0) { 
      this.drawY += this.speed; 
      this.speed -= 1; 
     } 
    } 
} 
+2

बल, गति और घर्षण के बुनियादी भौतिक सिमुलेशन में देखें। इसे बनाओ ताकि आपकी चाबियाँ जहाज में एक प्रकार का बल जोड़ सकें, जिसमें द्रव्यमान होता है, और जिस पर घर्षण लागू होता है ... पैरामीटर (द्रव्यमान, घर्षण, बल) के उचित चयन के साथ, आप सभी प्रकार के व्यवहार बना सकते हैं । हालांकि यह मुश्किल है! लेकिन आप इसे बाद में उपयोग कर सकते हैं: एक बोनस प्राप्त करें जिसके साथ एक जहाज तेजी से कार्य करता है, या ऋणात्मक बोनस, जिससे जहाज भारी कार्य करता है। – ppeterka

+2

बहुत अधिक सिर्फ भौतिकी के नियमों को जावास्क्रिप्ट ओ.ओ – VoidKing

उत्तर

23

आप बस कुछ घर्षण लागू करना चाहते हैं। यह बहुत आसान है। आप निम्न की तरह कुछ कर सकते हैं।

this.speed*=0.98; 

जितना तेज़ होगा उतना तेज़ मूल्य (0.8, 0.5, आदि) जितना तेज़ होगा उतना तेज़ होगा।

मैंने एक डेमो प्रदान किया जहां आप चारों ओर स्थानांतरित कर सकते हैं और धीरे-धीरे धीमे हो जाएंगे। आगे बढ़ें और मूल्य के साथ खेलें और देखें कि यह इसे कैसे प्रभावित करता है।

Live Demo

var canvas = document.getElementById("canvas"), 
    ctx = canvas.getContext("2d"); 

canvas.width = canvas.height = 300; 

var x = 150, //initial x 
    y = 150, // initial y 
    velY = 0, 
    velX = 0, 
    speed = 2, // max speed 
    friction = 0.98, // friction 
    keys = []; 

function update() { 
    requestAnimationFrame(update); 

    // check the keys and do the movement. 
    if (keys[38]) { 
     if (velY > -speed) { 
      velY--; 
     } 
    } 

    if (keys[40]) { 
     if (velY < speed) { 
      velY++; 
     } 
    } 
    if (keys[39]) { 
     if (velX < speed) { 
      velX++; 
     } 
    } 
    if (keys[37]) { 
     if (velX > -speed) { 
      velX--; 
     } 
    } 

    // apply some friction to y velocity. 
    velY *= friction; 
    y += velY; 

    // apply some friction to x velocity. 
    velX *= friction; 
    x += velX; 

    // bounds checking 
    if (x >= 295) { 
     x = 295; 
    } else if (x <= 5) { 
     x = 5; 
    } 

    if (y > 295) { 
     y = 295; 
    } else if (y <= 5) { 
     y = 5; 
    } 

    // do the drawing 
    ctx.clearRect(0, 0, 300, 300); 
    ctx.beginPath(); 
    ctx.arc(x, y, 5, 0, Math.PI * 2); 
    ctx.fill(); 
} 

update(); 

// key events 
document.body.addEventListener("keydown", function (e) { 
    keys[e.keyCode] = true; 
}); 
document.body.addEventListener("keyup", function (e) { 
    keys[e.keyCode] = false; 
}); 
+1

के साथ शानदार बनाएं, जो कि मैं धन्यवाद के लिए देख रहा था! –

+1

बहुत बढ़िया! मुझे जिस चीज की जरूरत थी। मेरे कोड को सरलीकृत किया गया। – Xaxis

+0

अपने उत्तर से प्यार करें। क्या शीर्ष पर बजाए अद्यतन फ़ंक्शन के अंत में अनुरोध एनीमेशन फ्रेम (अपडेट) कॉल डालने के बीच कोई अंतर है? – macalaca

1

मुझे लगता है कि मैं क्या होगा KeyUp पर नहीं है जहाज को रोकें, बस एक फंक्शन है जो इसे थोड़ा धीमा कर देता है, फिर भी इस फ़ंक्शन को सेट अंतराल पर कॉल करें जो भी अंतराल आपको वांछित प्रभाव देता है और फिर जहाज की गति शून्य कॉल स्पष्ट होती है अंतराल

तो मूल रूप से आप कुंजीपटल पर सेटअप करते हैं सेट इंटरवल (धीमी गति, 500)

0

तुम सिर्फ

if(!playerUp && !playerDown && moveSpeed > 0){ 
    moveSpeed--; 
} 

नहीं कर सका या आपको लगता है कि के लिए एक विशेष सूत्र चाहते थे?

संबंधित मुद्दे