海贼王游戏--EM游戏05--画龙点睛

来源:互联网 发布:软件应用网络安全方案 编辑:程序博客网 时间:2024/04/29 16:23

首先在这给各位拜个晚年微笑

今天我们来解决上一次未解决的错误

1.第一是解决不同动作导致位置错移的现象

    首先我们来找出这个问题出现的来源

由于我们取的素材是直接通过ps导出的gif图像,不同的动作图像像素不同

而当我们的路飞运动时,图像没有一个标准去实现它的连贯性,导致错位

很好的是EM编辑器有一个置中心点的函数可以解决这个问题

先来看看我们改过之后的代码

(搞点html,让我们的代码风格变一下,加个下拉条,省的代码零乱)

-- ■ 初始化屏幕--===============================================================================引擎 = D2D_引擎.创建("海贼王",60,640,480,true,true,"Dat/game.ico")背景图片 = 引擎:载入图片("Dat/背景01.jpg")背景精灵 = D2D_精灵.创建(背景图片,0,0,引擎:取图片宽度(背景图片),引擎:取图片高度(背景图片))路飞静止图片=引擎:载入图片("Dat/路飞静止.png")路飞静止动画=D2D_动画.创建(路飞静止图片,3,8,0,0,36,48)路飞静止动画:播放()路飞静止动画:置中心点(15,20)路飞跑图片=引擎:载入图片("Dat/路飞跑.png")路飞跑动画=D2D_动画.创建(路飞跑图片,8,8,0,0,50,50)路飞跑动画:播放()路飞跑动画:置中心点(25,25)路飞踢图片=引擎:载入图片("Dat/路飞踢.png")路飞踢动画=D2D_动画.创建(路飞踢图片,8,8,0,0,110,106)路飞踢动画:播放()路飞踢动画:置中心点(20,80)路飞拳图片=引擎:载入图片("Dat/路飞拳.png")路飞拳动画=D2D_动画.创建(路飞拳图片,3,8,0,0,61,50)路飞拳动画:播放()路飞拳动画:置中心点(20,22)路飞档图片=引擎:载入图片("Dat/路飞档.png")路飞档动画=D2D_动画.创建(路飞档图片,7,8,0,0,63,70)路飞档动画:播放()路飞档动画:置中心点(30,40)路飞跳跃图片 = 引擎:载入图片("Dat/路飞跳.png")路飞跳跃动画 = D2D_动画.创建(路飞跳跃图片,4,3,0,0,80,80)路飞跳跃动画:置中心点(35,45)路飞跳跃动画:播放()右键弹起时间=0左键弹起时间=0路飞信息={x=200,y=300,状态="静止",方向="右",速度=2,弹跳力=6}画面偏移={x=0,y=0}


代码中可以看出在每个动画初始化时都加了置中心点命令

中心点怎么找呢

一般中心点都去图像人物的正中央


但这只是初略了确定

我们以路飞静止动画的中心点为标准,在分别调试其他动作的中心点,直到动画运动时没有明显的错位就行

因为我们的素材不是pak包有确定的偏移数据,所以目前我只有这种办法了,希望有更精确方法的网友可以分享

解决一个问题了,但是路飞的跳动作还有问题,当路飞状态为下落时,路飞出现''隐身'',没见了?咋回事?

肯定逻辑出问题了!!!

路飞跳的逻辑是:开始赋值路飞一个弹跳力,起跳后弹跳力=弹跳力-权重*t。

落下时应该和起跳地点相同,这就和物理里面的上抛动作一样。

我们来修改下代码如下:

if(引擎:取按键按下(键_W) and 路飞信息.状态 ~= "起跳" and 路飞信息.状态 ~= "落下")then路飞信息.状态 = "起跳"路飞信息.弹跳力 = 5路飞跳跃动画:置当前帧(0)endif(路飞信息.状态 == "起跳") then路飞信息.弹跳力 = 路飞信息.弹跳力 - dt * 10if(路飞信息.弹跳力 >0)then路飞信息.y = 路飞信息.y - 路飞信息.弹跳力else路飞信息.状态 = "落下"endendif(路飞信息.状态 == "落下") then路飞跳跃动画:置当前帧(3)路飞信息.弹跳力 = 路飞信息.弹跳力 + dt * 10if(路飞信息.弹跳力<5)then路飞信息.y = 路飞信息.y + 路飞信息.弹跳力else路飞信息.状态 = "静止"--路飞信息.y = 地平线endend

--===============================================================================-- ■ 屏幕渲染()--===============================================================================function 屏幕渲染 ()渲染开始()清屏(ARGB(255,128,128,128))背景精灵:显示_按区域(0,0,640,480)if(路飞信息.方向=="右")thenif(路飞信息.状态=="静止")then路飞静止动画:显示(路飞信息.x,路飞信息.y,0,1,1)endif(路飞信息.状态=="跑")then路飞跑动画:显示(路飞信息.x,路飞信息.y,O,1,1)endif(路飞信息.状态=="踢")then路飞踢动画:显示_高级(路飞信息.x,路飞信息.y,0,1,1)endif(路飞信息.状态=="拳")then路飞拳动画:显示_高级(路飞信息.x,路飞信息.y,0,1,1)endif(路飞信息.状态=="档")then路飞档动画:显示_高级(路飞信息.x,路飞信息.y,0,1,1)endif (路飞信息.状态=="起跳" or 路飞信息.状态=="落下")then路飞跳跃动画:显示_高级(路飞信息.x,路飞信息.y,0,1,1)endelseif(路飞信息.方向=="左")thenif(路飞信息.状态=="静止")then路飞静止动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)endif(路飞信息.状态=="跑")then路飞跑动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)endif(路飞信息.状态=="踢")then路飞踢动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)endif(路飞信息.状态=="拳")then路飞拳动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)endif(路飞信息.状态=="档")then路飞档动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)endif (路飞信息.状态=="起跳" or 路飞信息.状态=="落下")then路飞跳跃动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)endend渲染结束()return falseend

好,路飞的跳动作解决了。

测试发现,路飞静止时,动作很不连贯,由于动作只有3帧,重复是都是从第一帧开始,

这样第一帧和最后一帧不连贯,感觉路飞抽风了?

将动画帧率减小就行了

路飞静止动画=D2D_动画.创建(路飞静止图片,3,4,0,0,36,48)

ok解决了

下一期我们来加入背景图片和地面系统,实现横版效果,期待吧

微信公众号:恋爱大师






原创粉丝点击