2016-07-05 4 views
1

私は11歳でプログラミングには新しく、私はJavaScriptを使って私の学校でゲームをするための簡単なプラットフォームを作っています。javascriptでジャンプするコード

今、私はキャラクターをジャンプさせるコードに取り組んでいます。私は動きが流暢になり、現実的に見えるので、ちょうど上がったり下がったりするキャラクターより複雑です。キャラクターがジャンプすると、地面を速く去り、高くなるにつれて減速し、ある点に達するとゆっくりと落ち始める。それは(おそらく何らかのタイプの加速変数を使って)落ちるとスピードアップし、地面に当たって完全に止まるでしょう。

私はキャラクターを空中で左右に動かすことができるようにしたいと思います。キーが押されていると、一度ジャンプしてから地面に当たったときに、キーがまだ押されていると再びジャンプします。 (ゲーム内キャラクターはかなり高いジャンプが可能でなければならない)

私はこれをやろうとしましたが、面白いエラーが発生しました。

//movement (x) 
    var maxSpeed = 12.5; 
    var xForce = 0; 
    var kingXPos = 0; 

    //movement (y) 
    var yForce = 0; 
    var kingYPos = 202; 

    //LV design 
    var floorHeight = 150; 

var draw = function() { 

//background and basics 
    background(255, 0, 0); 
    image(getImage("creatures/Winston"), kingXPos, kingYPos, 50, 50); 

//level features (only the floor right now) 
    fill(0, 0, 0); 
    rect(0, 250, 400, floorHeight); 

//right movement 
     if (keyIsPressed && keyCode === RIGHT) { 
    kingXPos = kingXPos + xForce; 
    xForce = xForce + 0.25; 
    if (xForce >= maxSpeed && keyIsPressed) { 
     xForce = maxSpeed; 
    } 
    } 

//left movement 
    if (keyIsPressed && keyCode === LEFT) { 
    kingXPos = kingXPos + xForce; 
    xForce = xForce - 0.25; 
    if (xForce <= -maxSpeed && keyIsPressed) { 
     xForce = -maxSpeed; 
    } 
    } 

//jump (not yet functional) 
    if (keyTyped && keyCode === UP && kingYPos === floorHeight + 50) { 
     kingYPos = kingYPos + yForce; 
     yForce = yForce - 0.5; 

    } 

//other physics 
    if (!keyIsPressed) { 
    kingXPos = kingXPos + xForce; 
    if (xForce > 0) { 
     xForce = xForce - 0.25; 
    } 
    else if (xForce < 0) { 
     xForce = xForce + 0.25; 
    } 
    } 
}; 
+0

1)エラーを表示する2)*具体的な問題を教えてください – Li357

答えて

3

始まったばかり誰かのためにかなり印象的です。ここで

は私の(非常に壊れた)のコードです。あなたはジオメトリを直感的に理解しているようです。しかし、どのくらいの教育を受けているか分からないかもしれないドメイン知識があります。

物理学では、運動を記述する方程式の正しいセットは次のとおりです。

1. speed = change_in_location/time 

2. acceleration = change_in_speed/time 

注:「速度」より入力する短いので、私はここに単語「スピード」を使用しています。正しい言葉は技術的に「速度」です。物理学では、速度とは速度とは少し異なることを意味します。

注意する必要があるもう一つのことは、重力が加速の一形態であるということです。

new_location = (speed * time) + old_location 

new_speed = (acceleration * time) + old_speed 

あなたが一定時間アニメーションループを想定した場合は、だから簡素化time = 1ということを想定することができる。具体的には、それで上記の全てを書き換える9.8メートル/ S/S

の下向きの加速度でありますそれは:

new_location = speed + old_location 

new_speed = acceleration + old_speed 

これは重力をシミュレートするのに十分です。重力がちょうど加速度であるので:

// jump: 
kingYSpeed = -SOME_OTHER_NUMBER; // negative because "up" 

注:ジャンプする

gravity = SOME_NUMBER; // tune this to get the gravity you want 

kingYPos = kingYPos + kingYSpeed; 

kingYSpeed = kingYSpeed + gravity; 

はただのオブジェクトに速度のインスタント弾みをつけるドメイン知識はプログラマが理解しなければならないことを、プログラミングの外側知識であります特定の問題を解決するためです。たとえば、会計ソフトウェアを書くプログラマーは、会計に関する知識を持っている必要があります。実際には、業界のすべてのプログラマがドメイン知識を取得する努力を払っているわけではなく、システムアナリスト/コンサルタントがソフトウェアの要件を書いていることがあるためです。しかし、あなた自身のソフトウェアを書くときには、あなたはドメイン知識を得ること以外に選択肢がありません。

+0

ありがとう!私はこれを調べるでしょう。私はあなたの助けに感謝します。 – Marco

関連する問題