Construct2/3

创建于:2017-02-24

创建人: iconboy

94 信息 218 成员
Construct2/3 引擎开发专题

[实战]来做动作游戏:如何在斜45度游戏里实现跳跃高度

potion 2018-05-07

Image title

本教程内的游戏为小英雄大乱斗:https://indienova.com/g/little%20fighting,美术资源版权归属为@JKLLIN

注意:本教程只讲思路不会去详细说明如何在C2里怎么写事件。


我们要实现什么效果?

在C2里有2个非常常用的移动行为:

8 direction行为用来实现8方行走,通常我们可以用来做顶视角或45度角游戏。添加8dir就可以直接实现用键盘控制实例在画面中移动。

platform行为用来实现平台跳跃,platform的实例可以有非常简单实用的platform状态,包括jump,fall等。

那么,如果我们需要在8dir里添加跳跃该怎么实现?


基础概念

首先必须对有高度的斜45度游戏有一个基础概念:游戏的坐标体系是由XY轴(坐标)和Z轴(高度)组成的。

通过8dir行为可以直接实现对XY轴的控制,我们需要的是在这个基础上添加一个Z轴,让角色有高度。

Image title

拉尔夫出镜


逻辑和表现分离

首先我们要确定的是,为了实现这个效果,我们需要让角色的逻辑和表现分离。

为什么要拆开?

因为我们需要用8dir行为控制角色在地面的XY轴上移动,但当角色跳起来的时候,其实角色只是原地提高了Z轴高度,并没有改变XY的位置。

但角色在画面中真的会位移到较高的位置,所以我们必须让这个跳起来的角色还有一个标记当前XY位置的真正逻辑位置。

Image title

观察角色下方的绿色方块,该方块为角色在XY轴空间中的位置


即我们需要2个精灵,一个是真正的角色表现效果,包括角色的所有动画。另一个则是角色的逻辑位置,只需要一个简单的矩形即可。


这里暂时命名这两个精灵为:

role1 角色表现

role1_logic 绿框逻辑


接下来你只要控制role1_logic的8方行走就行了。对应的role1根据状态改变动画。

上面的角色精灵role1使用set postion可以绑定在role1_logic上。注意这里不要使用pin,pin会把角色钉死在role1_logic上,role1就真的跳不起来了。


Z轴的添加思路

role1_logic添加一个litetween行为,按照以下方式进行配置:


其中tween property设置为value,即我们要用litetween改变的是一个值。

function选择easeOutQuad是一个减速的运动行为,跳起到最高点是一个不断减速的表现效果。

target Mode选择Relative,即相对差值。

target和duration填写改变值和插值时间,这两个控制跳起来的高度和速度,可以在事件里填写。


跳跃开启

在事件里启动litetween的value,让角色跳起来。


第一行先为value设置初始值=0(表示是从地面开始的)

第二行设置value目标值为40

第三行设置时间为0.5秒

第四行设置开始执行litetween,这里使用pingpong的运动模式,是一个往返循环的运动模式

跳跃结束

因为设置了pingpong的运动模式会导致角色会不停的跳不会停止。所以还需要设置当pingpong循环一个循环结束后停止litetween:


这样,从逻辑上实现一个跳跃高度就完成了。最后你只需要把litetween.value的值和role1绑定起来就大功告成了。

逻辑Z轴体现在跳跃高度上

前面讲到role1需要set postion始终跟随role1_logic,这里的XY设置除了role1.x=role1_logic.x外,还需要在Y轴上添加litetween.value的值:role1.y=role1_logic.y-role1_logic.litetween.value(注意这里减value,因为跳起来是y轴减少)

这样,就可以让角色保持XY轴不变的情况下跳起来。

Image title

Image title


行为的拆分

上面描述的情况是非常简单的同高度跳跃,即从0高度开始跳到40,再落到0。ACT游戏一般也只需要做到这个程度了。但如果你想做更复杂的,比如二段跳,那么就不能使用pingpong方法。而需要自己将角色的状态扩展为jump和fall两个状态,分别控制litetween.value的起落运动了。

扩展内容

实现了以上功能,基本你就可以做出包括空中攻击,升龙拳,打击浮空等更复杂的战斗效果了。



近期喜欢的会员

 
枕头Alter 2018-05-07

谢谢potion叔的干货!这个效果可以直接用动画来实现么,就是直接在动画里做出精灵的z轴位移,然后每一个动画的锚点都设置在玩家的逻辑位置。

 
potion 2018-05-07
复活的枕头 可以,如果跳跃逻辑非常简单就OK。但是如果做复杂一点的游戏,比如角色的跳跃高度希望用数值配置,就无法仅靠动画来实现了。另外浮空这种效果也无法实现,因为在浮空中被攻击可能会再次打飞起到更高的高度。同样二段跳也不行。
 
badwolf 2018-07-11

楼主这个什么游戏啊,好酷~

 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册