0

ここで実装しようとしているのは、画面にキャラクターがあり、矢印キーを押すことで上下左右に移動できることです。

私がやりたいことは、左にクリックすると画像が反転し、右にクリックすると反転することです。これにより、キャラクターは常に歩き方を向いています。

元の画像と反転した画像を定義するコードは次のようになります。

Game.Hero = function (myX, myY){
var my = new createjs.Bitmap("img/hero.png");
my.reverseHero = function (){
    my.image.src = "img/hero-1.png";
};

次に、この問題を解決しようとしている方法を示すコード スニペットをここに示します。

my.moveBy = function(dirX, dirY){
    var testX = my.posX + dirX;
    var testY = my.posY + dirY;
    if (testX < 0 || testY < 0 || testX > 21 || testY > 8){
        return;
    }
    if (dirX === -1){
       my.reverseHero();

    } else if (dirX === 1) {
        Game.stage.addChild(Game.hero);                
    }

現時点での問題は、左に歩くとイメージが実際に反転するのですが、もう一度右に行こうとするとイメージが反転しないことです。

そのため、コードは実際には最初の if ステートメントのみを実行しており、そこでハングアップし続けています。

何が間違っている可能性があるか提案はありますか?

4

2 に答える 2

2

画像を設定した後、画像をリセットすることになっていませんか?これは、ヒーローを元のイメージに戻すための 2 つ目の関数を設定することを意味します。そのアクションが呼び出されたときにキャラクターを他の画像に設定するだけですが、そのアクションが呼び出されなくなった場合でも、その画像が設定されたままになるためです。

Game.Hero = function (myX, myY){
var my = new createjs.Bitmap("img/hero.png");
my.reverseHero = function (){
    my.image.src = "img/hero-1.png";
};
my.returnHero = function(){
    my.image.src = "img/hero.png";
};

次に、else if ステートメントで、その関数を呼び出します。

my.moveBy = function(dirX, dirY){
    var testX = my.posX + dirX;
    var testY = my.posY + dirY;
    if (testX < 0 || testY < 0 || testX > 21 || testY > 8){
        return;
    }
    if (dirX === -1){
       my.reverseHero();
    } else if (dirX === 1) {
        Game.stage.addChild(Game.hero);                
        my.returnHero();
    }

これはあなたにとって意味がありますか、それとももう少し明確にする必要がありますか?

于 2013-11-11T16:19:31.460 に答える
1

間違っているのは、イメージを で初期化し"img/hero.png"、それを に変更することです"img/hero-1.png"。これは問題ありませんが、reverseHeroメソッドを 2 度目に呼び出すと、古いイメージは元に戻りません ( "img/hero.png")。

これを変更するには、次のようなものを実装します。

var direction = true; // true means forward, false means backwards
my.reverseHero = function (){
    my.image.src = direction ? "img/hero-1.png" : "img/hero.png";
    direction = !direction;
};
于 2013-11-11T16:18:25.353 に答える