- 締切済み
iアプリの表示
いま、簡単なアプリをつくろうと思い、以下のところまでできましたが、 Flashのモーショントウィーンみたいしたいのですが、前の表示の画像が消えないので、つながった画像表示になります。どうしたら前の画像表示が消えて、新しい表示のみにすることができるか?教えていただけたらと思います。docomoのiアプリです。 public class JavaGame extends IApplication { public void start(){ MyCanvas canvas = new MyCanvas(); Display.setCurrent(canvas); canvas.run(); terminate(); } } import com.nttdocomo.ui.*; public final class MyCanvas extends Canvas{ public final static int FPS = 30; // フレームレート public final static int INTERVAL = 1000 / FPS; // フレームの間隔 // --- 変数の定義 long lastTime = 0; // 前回のフレーム終了時間 // --- 変数の定義 Graphics grp = getGraphics(); // グラフィックの取得 MediaImage mi; Image img; int chx; int chy; void run(){ init(); while(true){ proc(); draw(); sleep(); } } void init(){ mi=MediaManager.getImage("resource:///0.gif"); try{ mi.use(); }catch(Exception e){ } img =mi.getImage(); } void proc(){ chy+=10; } void draw() { grp.lock(); int color =Graphics.getColorOfRGB(0,0,255); grp.setColor(color); grp.drawImage(img,chx,chy); grp.unlock(true); } // --- 休止 void sleep() { long wait = INTERVAL - (System.currentTimeMillis() - lastTime); if(wait > 0) { try { Thread.sleep(wait); } catch(Exception e) { } } lastTime = System.currentTimeMillis(); } public void paint(Graphics grp){ } }//class
- みんなの回答 (2)
- 専門家の回答
みんなの回答
#1です >keyPadState()でキャラクターを移動をさせたときも同じ >やり方でよいのでしょうか? はい。画面上で1ピクセルでも変更があった場合は、 必ず一旦背景色(もしくは背景画像)で塗りつぶす(描画しなおす) ことで位置が移動しているように見せます。 基本的に描画系メソッドはは、「描く」ことしかできないので こういう移動処理の時は、以前の表示を「消す」のではなくて、 「上書きする」と思ってください。
draw()メソッドの grp.lock(); int color =Graphics.getColorOfRGB(0,0,255); grp.setColor(color); /**** この辺 ****/ grp.drawImage(img,chx,chy); grp.unlock(true); にgrp.fillRect() で画面全体を一回塗りつぶしてしまえばいいのでは? 通常こうやって一回スクリーンをクリアしてから再描画すると思うのですが・・・。 ※場合によっては部分再描画だけで済まし、パフォーマンスを上げる時もあります。
お礼
うまくいきました、一度塗りつぶせばよかったのですね、 ありがとうございます。 keyPadState()でキャラクターを移動をさせたときも同じ やり方でよいのでしょうか?
お礼
重ね重ね丁寧なお答え、ありがとうございます。 非常によくわかりました、上書きをするという のがわかりませんでした、Flashでゲームをつくったり していたので、ムービークリップを動かす感覚で 画像をうごかす方法を考えていたのが方向が違うのが よくわかりました、非常に基礎的質問なのに、丁寧に教えて くださり、ありがとうございました。