首先在这给各位拜个晚年
今天我们来解决上一次未解决的错误
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)
end
if(路飞信息.状态 == "起跳") then
路飞信息.弹跳力 = 路飞信息.弹跳力 - dt * 10
if(路飞信息.弹跳力 >0)then
路飞信息.y = 路飞信息.y - 路飞信息.弹跳力
else
路飞信息.状态 = "落下"
end
end
if(路飞信息.状态 == "落下") then
路飞跳跃动画:置当前帧(3)
路飞信息.弹跳力 = 路飞信息.弹跳力 + dt * 10
if(路飞信息.弹跳力<5)then
路飞信息.y = 路飞信息.y + 路飞信息.弹跳力
else
路飞信息.状态 = "静止"
--路飞信息.y = 地平线
end
end
--===============================================================================
-- ■ 屏幕渲染()
--===============================================================================
function 屏幕渲染 ()
渲染开始()
清屏(ARGB(255,128,128,128))
背景精灵:显示_按区域(0,0,640,480)
if(路飞信息.方向=="右")then
if(路飞信息.状态=="静止")then
路飞静止动画:显示(路飞信息.x,路飞信息.y,0,1,1)
end
if(路飞信息.状态=="跑")then
路飞跑动画:显示(路飞信息.x,路飞信息.y,O,1,1)
end
if(路飞信息.状态=="踢")then
路飞踢动画:显示_高级(路飞信息.x,路飞信息.y,0,1,1)
end
if(路飞信息.状态=="拳")then
路飞拳动画:显示_高级(路飞信息.x,路飞信息.y,0,1,1)
end
if(路飞信息.状态=="档")then
路飞档动画:显示_高级(路飞信息.x,路飞信息.y,0,1,1)
end
if (路飞信息.状态=="起跳" or 路飞信息.状态=="落下")then
路飞跳跃动画:显示_高级(路飞信息.x,路飞信息.y,0,1,1)
end
elseif(路飞信息.方向=="左")then
if(路飞信息.状态=="静止")then
路飞静止动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)
end
if(路飞信息.状态=="跑")then
路飞跑动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)
end
if(路飞信息.状态=="踢")then
路飞踢动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)
end
if(路飞信息.状态=="拳")then
路飞拳动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)
end
if(路飞信息.状态=="档")then
路飞档动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)
end
if (路飞信息.状态=="起跳" or 路飞信息.状态=="落下")then
路飞跳跃动画:显示_高级(路飞信息.x,路飞信息.y,0,-1,1)
end
end
渲染结束()
return false
end
好,路飞的跳动作解决了。
测试发现,路飞静止时,动作很不连贯,由于动作只有3帧,重复是都是从第一帧开始,
这样第一帧和最后一帧不连贯,感觉路飞抽风了?
将动画帧率减小就行了
路飞静止动画=D2D_动画.创建(路飞静止图片,3,4,0,0,36,48)
ok解决了
下一期我们来加入背景图片和地面系统,实现横版效果,期待吧
微信公众号:恋爱大师