イベントの処理として状態を表す変数を変更した後は、repaintメソッドで描画の更新を行います。
48: public void processEvent(int type, int param){ 49: switch(type){ 50: case Display.TIMER_EXPIRED_EVENT: 51: mouth += dm; 52: if(mouth < 0){ 53: dm = 5; 54: mouth = 0; 55: } else if (mouth > 45){ 56: dm = -8; 57: mouth = 45; 58: } 59: repaint(); 60: break; 61: } 62: } |
実行させると、画面2のように図形がアニメーションします。
キー操作によって図形を動かしてみましょう。
iアプリでキー操作によって図形を動かす時には、キーが影響を与える位置など状態を保存する変数を用意して、キーが押されたときにその変数の値を変更するようにします。
ここでは左右のキーで図形の位置と向きが変わるようにするので、まず図形の向きとX座標を保存する変数arcとxを用意します。
29: /** 口の開く角度 */ 30: int mouth = 45; 31: /** 口の動く速さ */ 32: int dm = -8; 33: /** 口の向き */ 34: int arc = 0; 35: /** 描画横座標 */ 36: int x = 50; 37: |
描画に変数の値が反映されるように、paintメソッドでの図形の描画部分を書き換えます。
41: public void paint(Graphics g) { 42: g.lock(); 43: g.clearRect(0, 0, getWidth(), getHeight()); 44: Font f = Font.getFont(Font.TYPE_DEFAULT); 45: int ofset = f.getAscent(); 46: g.drawString("動きます",10,10 + ofset); 47: g.setColor(Graphics.getColorOfName(Graphics.BLUE)); 48: g.fillArc(x, 110, 30, 30, mouth + arc, 360 - mouth * 2); 49: g.unlock(true); 50: } |
最後に、キーが押された時に座標を増減させて、また向きが変わるようにします。
キーが押されたときの処理もprocessEventで行います。このとき第一引数で渡される値はDisplay.KEY_PRESSED_EVENTになっています。
第二引数に押されたキーを表す定数が渡されます。左キーはDisplay.KEY_LEFTで右キーはDisplay.KEY_RIGHTです。次のように処理を記述します。タイマーイベントによって再描画されるので、ここでは再描画を行っていません。
52: public void processEvent(int type, int param){ 53: switch(type){ 54: case Display.KEY_PRESSED_EVENT: 55: switch(param){ 56: case Display.KEY_LEFT: 57: x -= 2; 58: arc = 180; 59: break; 60: case Display.KEY_RIGHT: 61: x += 2; 62: arc = 0; 63: break; 64: } 65: break; 66: |
実行すると、画面3のように左右キーを押した場合に動きます。
Copyright © ITmedia, Inc. All Rights Reserved.