论坛首页 移动开发技术论坛

游戏中动画的基础

浏览 10730 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-28  
全文请看
游戏中动画的基础
这篇文章是纯粹的个人看法。
游戏的基础是动画,想来大家都知道。这几天公司的项目都忙完了。很是无聊,所以就上网找了些资源,并写两个动画的例子。在此贴出来,让大家把砖头砸我吧。^_^
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. }
  • 大小: 6.7 KB
  • 大小: 182.3 KB
   发表时间:2006-11-28  
我怎么感觉这里面没有用到GAME包呢?
这效果我觉得有一个非常的好的教程代码
是那个foxdonw的教程,如果用GAME包的话那个
有一个做"撑过20秒"的教程也非常有帮助
0 请登录后投票
   发表时间:2006-11-28  
忘记一点,在MIDP2中可以设置关于双缓冲的。但是在MIDP规范中并没有强制要求一定要设备支持,所以如果是MIDP2设置双缓冲的话,一定要判断设备是否支持
0 请登录后投票
   发表时间:2006-11-28  
对啊。上面的例子我并没有用到game的包。
都是在Canvas中绘制的。
其实自己都可以实现双缓冲功能。只是看看有没有这个必要。
呵呵
0 请登录后投票
   发表时间:2006-11-28  
whycloud 写道
忘记一点,在MIDP2中可以设置关于双缓冲的。但是在MIDP规范中并没有强制要求一定要设备支持,所以如果是MIDP2设置双缓冲的话,一定要判断设备是否支持


对了。兄台可以在这里加上一段关于怎么判断是否支持双缓冲码?
0 请登录后投票
   发表时间:2006-11-28  
wuhua 写道
对啊。上面的例子我并没有用到game的包。
都是在Canvas中绘制的。
其实自己都可以实现双缓冲功能。只是看看有没有这个必要。
呵呵
0 请登录后投票
   发表时间:2006-11-28  
恩,我回去找找,那个FoxDown的教程回头发到圈子里吧
不过那个一直就没找到作者
0 请登录后投票
   发表时间:2006-11-28  
恩。好的。让大家也学习学习
0 请登录后投票
   发表时间:2006-11-28  
wuhua 写道
whycloud 写道
忘记一点,在MIDP2中可以设置关于双缓冲的。但是在MIDP规范中并没有强制要求一定要设备支持,所以如果是MIDP2设置双缓冲的话,一定要判断设备是否支持


对了。兄台可以在这里加上一段关于怎么判断是否支持双缓冲码?

刚一问还真想了半天,现在想起来了
在midp2中Canvas有一个public boolean isDoubleBuffered()方法来判断该设备是否支持二重缓冲,如果不支持还是需要手动实现的
0 请登录后投票
   发表时间:2006-11-28  
哈哈。楼上的你自己实现过双缓冲码?
实现是不是先创建一个可绘制的Image,然后在上面做些事情啊。
对了。你有设计游戏码
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics