j2me动画

这个playAnimation() 这样写: 

int frameIndex = 0; 
Image[] animationFrames; 
//定义一个图像数组来存储一个动画的每一桢图像。假设已经被装载好了。假设是上面那幅动画,这个数组里面就存了12幅画。 
(实际不是这样,还要更仔细一些,例如只存二进制数据而不是一个图像,到了播放时才即时创建一幅出来。而且相同的桢数据不会重复放在里面。 
现在只是举个比上面的代码好点儿的例子。) 

public void playAnimation() { 
    Image currentFrameImage = animationFrames[frameIndex]; //把当前桢的那幅图给取出来 
    if (playAnimation) { //现在假设没有这个变量,往后看。 
        drawImag(currentFrameImage,...);//画到屏幕上。(代码没写全,drawImage还有很多参数) 
        frameIndex ++; // 桢往后推个1。下次画就是画下一桢了。 
    } 

    if (frameIndex > animationFrames.length) {// 如果播完了12桢怎么办?自己决定,是重头画还是停止。 
        //如果重头画 
        //frameIndex = 0; 

        //如果让这个动画画一遍就停下. 
        // playAnimation = false; 
//现在知道有什么用了吧?虽然playAnimation还在被一直调用,但已经没有东西画出来了。 
    } 

 



恩, 动画的播放原理差不多就这样。 

然后再说说详细说说动画的组成。 

动画是由一桢一桢的图像组成。 
而每一桢的图像又是一块一块的小图拼成。 

为什么要这样做? 
一方面,在j2me程序中,程序+资源包的大小十分受限。 
假如做一个小人儿的动画,就算10桢,就需要10幅画。 
如果再多做几个小人儿动画,就是10xN幅画,太大了。 
这样,就可以把各种各样小人儿的头,不同形状,不同动作,专门做成一整套,一个一个的,或者说看起来一块一块的,拼到一个大图上。 
小人儿们的腿,身子,胳膊等等,也都按不同形状,不同动作等分别做成一整套。 

这样,就可以从这些胳膊腿儿里面挑一个形状,挑一个动作,组成一个小人,这就形成了一桢。 
不同的形状,不同的动作的组合可以做很多个不同的动画,但是资源大小并没有改变。(不能贴图,google应该改进.) 

另外一方面,碰撞检测。 
在播放动画的时候,往往需要检测一个动画和另一个动画是否碰撞在一起。 
例如,街霸。 
那么检测碰撞,不是检测整个一桢的碰撞,而是这一桢中,人的胳膊腿儿等的碰撞。 
这样,把一大块桢分开成小的模块,也更合理。 
这个组成桢的基本单位,术语称作"Module"。 
在这里不多说,其实我也说不出啥东西。还是要自己做,自己研究。 

还有动画的应用。 
例如我们要播放一个片头动画,这很常见。展示我们的logo之类的。 
就这样。 
while (true) { 
    playAnimation(mylogo); 

 



我们要让主角行走。 

while (true) { 
    player.setAction(walk); //把动画封装在一个player类中。 
    player.update(); // 之前玩家已经把动作设置成为walk了。现在来更新这个动作。其实就是动画的播放 

 



public class Player { 
    int action; 
    public void update() { 
        switch (action) { 
        case walk: 
            playAnimation(walkAnimation); //呵呵,怎么样?这就差不多是AI了,只不过这个AI只是会播放动画 
            //再随便瞎写几句 
            if (keyPressed(Num4)) { 
               //如果按了四键,就让玩家的位置发生变化。相应的,playAnimation里绘制桢的坐标就发生了变化。 
               //这样看起来,主角就是一边做walk的动作一边移动了。呵呵。像真实世界中的。 
               posX -= 20; //往左移动。 
            } 
        break; 
        } 
   } 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值