海贼王游戏--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解决了
下一期我们来加入背景图片和地面系统,实现横版效果,期待吧
微信公众号:恋爱大师
- 海贼王游戏--EM游戏05--画龙点睛
- 海贼王游戏--EM游戏02--未雨绸缪
- 海贼王游戏--EM游戏03--初出茅庐
- 海贼王游戏--EM游戏04--小试牛刀
- 海贼王游戏--EM游戏06--巧夺天工
- 海贼王游戏--EM游戏01--计划开始
- 海贼王游戏--EM游戏07--向伟大航路出发
- 2D小游戏——海贼王回合制游戏
- 海贼跑酷 跑酷类游戏 源码解析
- 海贼王
- 海贼王
- 海贼王
- 海贼王
- 海贼王
- 游戏
- 游戏
- 游戏
- 游戏
- C#串口通信总结
- windows7安装myeclipse 10.0时出现failed to find a main class in "c:\windows\temp"解决
- Android中程序与Service交互的方式——综述
- 移动手机消息推送机制
- ubuntu 交叉编译环境的构建
- 海贼王游戏--EM游戏05--画龙点睛
- 查看语句运行时间异常的原因(SQLServer)
- 《大明宫词》之《采桑女》
- 1%与90%与信息技术素质
- ipad平板上一样开发程序,牛X应用codea
- C#串口发送接受数据
- 正则习点 --- 02
- Datasets for Data Mining
- new data sets