スプライトを動かす
キーイベントが取れたので、スプライトを動かしてみる。
package { import flash.display.*; import flash.text.*; import flash.events.*; import flash.ui.*; public class SpriteTest extends Sprite { private var field:Sprite; private var player:Sprite; private var size:uint = 320; private var cx:uint = 0; private var cy:uint = 0; public function SpriteTest() { field = new Sprite(); player = new Sprite(); addChild(field); field.addChild(player); this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keydown); draw(); } private function draw():void { field.graphics.beginFill(0x0); field.graphics.drawRect(0, 0, size, size); field.graphics.endFill(); player.x = cx*32; player.y = cy*32; player.graphics.beginFill(0x00FF00); player.graphics.drawRect(0, 0, 32, 32); player.graphics.endFill(); } public function keydown(e:KeyboardEvent):void { switch (e.keyCode){ case Keyboard.UP: if(cy>0){ cy--; } break; case Keyboard.DOWN: cy++; if(cy>9){ cy = 9; } break; case Keyboard.LEFT: if(cx>0){ cx--; } break; case Keyboard.RIGHT: cx++; if(cx>9){ cx = 9; } break; } draw(); } } }
Spriteクラスはフィールドとして座標x, yがあるので、親スプライトにaddChildしたあとに座標を動かせば動いてくれる。
また、普通にaddEventListenerをするとフォーカスに左右されてしまうため、this.stageにイベントリスナを追加するのが定石っぽい。
あと、すごくどうでも良いハマりポイントとして、C時代の癖で
cx--; if(cx<0){ cx = 0; }
とやってたんだけれど、この場合cxはuintで宣言されているのでおかしくなる。
結構簡単にキャラが動いたな。ネイティブにスプライトを持っている言語はほんとうに楽だ。