游戏中动画的基础

游戏的基础是动画,想来大家都知道。这几天公司的项目都忙完了。很是无聊,所以就上网找了些资源,并写两个动画的例子。在此贴出来,让大家把砖头砸我吧。^_^
j2me midp2.0有个game的包是用来设计有游戏用的。它提供了游戏设计的基础控件,比如双缓冲,精灵,图层控制器等基础设施,这些设施可以方便我们的设计,比如双缓冲可以让游戏执行流畅,精灵等,可以更好的控制角色。
说白了。动画的效果其实就是一幅幅图片按照指定的时间一幅幅的换图片而已。
好了。看代码吧。

java 代码
  1. package org.wuhua.game.timer;
  2. import java.util.Timer;
  3. import java.util.TimerTask;
  4. /**
  5. * 对Timer的包装
  6. * @author wuhua
  7. */
  8. public class TimerTaskManager {
  9. private Timer _timer;
  10. static TimerTaskManager instace;
  11. public static TimerTaskManager getInstace() {
  12. if (instace == null)
  13. instace = new TimerTaskManager();
  14. return instace;
  15. }
  16. public TimerTask add(Runnable runnable, long period) {
  17. TimerTask task = new RunnableTimerTask(runnable);
  18. long delay = period;
  19. getTimer().schedule(task, delay, period);
  20. return task;
  21. }
  22. void close() {
  23. if (_timer != null) {
  24. _timer.cancel();
  25. _timer = null;
  26. }
  27. }
  28. private Timer getTimer() {
  29. if (_timer == null)
  30. _timer = new Timer();
  31. return _timer;
  32. }
  33. static class RunnableTimerTask extends TimerTask {
  34. private Runnable _runnable;
  35. RunnableTimerTask(Runnable runnable) {
  36. _runnable = runnable;
  37. }
  38. public void run() {
  39. _runnable.run();
  40. }
  41. }
  42. }
java 代码
  1. package org.wuhua.game;
  2. import java.io.IOException;
  3. import java.util.TimerTask;
  4. import javax.microedition.lcdui.Canvas;
  5. import javax.microedition.lcdui.Graphics;
  6. import javax.microedition.lcdui.Image;
  7. import org.wuhua.game.timer.TimerTaskManager;
  8. /**
  9. * 动画的主类
  10. * @author wuhua
  11. */
  12. public class Game extends Canvas implements Runnable{
  13. private Image source;
  14. private Image action[] = new Image[10];
  15. private int bgcolor = 0x209C00;
  16. private TimerTask task;
  17. private static int next;
  18. Game(){
  19. try {
  20. source = Image.createImage("/action.png");
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. }
  24. //切割图片
  25. for(int i=0; i<5; i++){
  26. action[i] = Image.createImage(source, 96*i, 0, 96, 60, 0);
  27. }
  28. for(int j=5; j<10; j++){
  29. action[j] = Image.createImage(source, 96*(j-5), 102, 96, 80, 0);
  30. }
  31. //这个是用来执行动作的计时器。原理是要求经过0.2毫秒动一次
  32. task = TimerTaskManager.getInstace().add(this, 150);
  33. }
  34. protected void paint(Graphics g) {
  35. fillScreen(g);
  36. paintAction(g);
  37. }
  38. private void fillScreen(Graphics g) {
  39. g.setColor(0xFFFFFF);
  40. g.fillRect(0, 0, this.getWidth(), this.getHeight());
  41. }
  42. private void paintAction(Graphics g) {
  43. if(next == 10)
  44. next =0;
  45. //如果绘制的图片是出雷电的时候,让人物停留在那里。这样的效果会好点
  46. if(next>=5){
  47. g.drawImage(action[4], 10*4, 0, Graphics.LEFT|Graphics.TOP);
  48. }
  49. g.drawImage(action[next], 10*next, 0, Graphics.LEFT|Graphics.TOP);
  50. next++;
  51. }
  52. public void run() {
  53. repaint();
  54. }
  55. }