2017-07-13 3 views
0

私はいくつかのスプライトを使ってこの動きをキーボードとやり取りしようとしています。 1)キャラクターの動きはアニメーションそのものには向いていません(既にアニメーション化されている間に1秒ほど後に動き始めます)。私が本当にしたいのは、この問題のために私が得る「初期の加速感」なしで動くことです。 2)キーを押したときに直面すべき位置に文字を向ける方法は考えられません解放されます。私はここのコードを投稿しますが、それは正常に動作し、あなたがそれをチェックアウトしたい場合、私は、このリンクで利用可能skecthを作ったので、小さくないために、画像を必要とするので:https://www.openprocessing.org/sketch/439572スプライト動きに応じて滑らかな動きと向き合った位置

PImage[] reverseRun = new PImage [16]; 

PImage[] zeroArray = new PImage [16]; 

void setup(){ 
    size(800,600); 
    //Right Facing 
    for(int i = 0; i < zeroArray.length; i++){ 
    zeroArray[i] = loadImage (i + ".png"); 
    zeroArray[i].resize(155,155); 
    } 
    //Left Facing 
    for(int z = 0; z < reverseRun.length; z++){ 
    reverseRun[z] = loadImage ("mirror" + z + ".png"); 
    reverseRun[z].resize(155,155); 
    } 
    } 

void draw(){ 
    frameRate(15); 
    background(255); 
    imageMode(CENTER); 

    if(x > width+10){ 
    x = 0; 
    } else if (x < - 10){ 
    x = width;} 






if (i >= zeroArray.length){ 
    i = 3;} //looping to generate constant motiion 

if (z >= reverseRun.length){ 
    z = 3;} //looping to generate constant motiion 

if (isRight) { 
    image(zeroArray[i], x, 300); 
    i++; 
    } //going through the images at the array 
else if (isLeft) { 
    image(reverseRun[z],x,300); 
    z++; 
    } going through the images at the array 

else if(!isRight){ 
    image(zeroArray[i], x, 300); 
    i = 0; } //"stoped" sprite 
    } 
} 




//movement 
float x = 300; 
float y = 300; 
float i = 0; 
float z = 0; 
float speed = 25; 
boolean isLeft, isRight, isUp, isDown; 
void keyPressed() { 




setMove(keyCode, true); 

if (isLeft){ 
    x -= speed; 
} 
if(isRight){ 
    x += speed; 
} 
} 

void keyReleased() { 
    setMove(keyCode, false); 

} 

boolean setMove(int k, boolean b) { 
    switch (k) { 
    case UP: 
    return isUp = b; 

    case DOWN: 
    return isDown = b; 

    case LEFT: 
    return isLeft = b; 

    case RIGHT: 
    return isRight = b; 

    default: 
    return b; } 
} 

答えて

0

運動の問題をオペレーティングシステムがキー押下間に遅延を設定しているために発生します。これを試してみるには、テキストエディタに行き、キーを押してください。文字がすぐに表示され、続いて遅延が続き、次にキーを離すまで文字が繰り返されることに気付くでしょう。

この遅延は、keyPressed()関数の呼び出し間でも発生しています。また、keyPressed()関数内の文字(x変数を変更して)を動かすと、動きが遅くなっています。

この問題の解決策は、keyPressed()機能にのみ依存するのではなく、どのキーが押されているかを確認することです。 draw()関数内でkeyCode変数を使用するか、boolean変数を使用してどのキーが押されたかを把握できます。

すでに実際にはisLeftisRightという変数を使用しています。しかし、私は上記で概説した問題のために彼らの目的を破る、keyPressed()関数でそれらをチェックしているだけです。言い換えれば

、それは代わりにdraw()関数内ですのでkeyPressed()機能からこのブロックを移動:キャラクターが動いていないときに直面するどの方法を知るためのよう

if (isLeft){ 
    x -= speed; 
} 
if(isRight){ 
    x += speed; 
} 

、あなたは別のものを使用していることを行うことができますbooleanあなたが直面している方向を追跡する値。

サイドノート:コードを正しくインデントするようにしてください。今は読みにくいです。

恥知らずの自己宣伝:処理可能なユーザ入力に関するチュートリアルを書いていますhere

+0

もう一度ありがとうkevin workmanあなたは私の一日を救った。 Btwあなたのサイトは素晴らしいですが、私はそれを使ってより多くのことを学びます。 –

関連する問題