Spriteを回転させながら移動ってできない?と聞かれました。
つまり、コードにしたらこんな感じ
var img = new Sprite(16, 16); img.image = someImage; game.rootScene.addEventListener(Event.ENTER_FRAME, function(){ img.y += 5; img.scaleY += 1; img.rotate(30); } });
imgというSpriteを毎フレーム毎にy方向に動かしながら、活縦にびよーんと伸ばしながら、かつ30°づつ回転させるというコードです。
コレが動かない……。
で、今日(4/3)は大風、大雨で会社が半ドンとなったので家でこの原因究明しようと思い、
さてと、enchant.jsで Spriteを rotate or scale したときに、 xとかyを加算できない問題の原因を究明する。てかそういうものなの? #enchant.js
— hidesukeさん (@hidesuke) 4月 3, 2012
とつぶやくと、
@hidesuke Safariのバグです
— Ryo Shimizuさん (@shi3z) 4月 3, 2012
UEIの清水さんから直接ご回答いただきました! 本当に便利な世の中です! ありがとうございました!
バグなら仕方ないんですが、やはりSafariで確認することが多いMac使い。ここはSafariでも動くようにしておきたい。
というわけで、動くようにしました。
回避方法は、twitterでもつぶやいているように、偶数フレームではローテート、奇数フレームでは移動するという動作を交互に実行するようにしました。
コードはこんな感じ。
var img = new Sprite(16, 16); var dScaleY = 1, dRotate = 30, dy = 3; game.rootScene.addEventListener(Event.ENTER_FRAME, function(){ if(game.frame % 2 === 0) { console.log("hoge"); if(img.y > game.height || img.y < 0) { dy *= -1; } img.y += dy; } else { if (img.scaleY > 10 || img.scaleY < -10) { dScaleY *= -1; } img.scaleY += dScaleY; img.rotate(dRotate); } });
うん、説明と逆だね! 偶数フレームで移動、奇数フレームで回転&拡縮を行なっています。
jsdo.itにサンプル上げたんでそちらもどうぞ
Osaki.jsは勉強になるね!(棒
でもできるゲームを早く公開できたらいいなーと思います。
昨日は、入社3年目ボーイがつくった Metal Bear Solidがスペランカーばりの難易度でゲラゲラわらえてよかったw
0 件のコメント:
コメントを投稿