本人小白游戏开发,在坑中摸爬滚打了一段时间了。最近刚完成了一款目前比较火热的合成类游戏开发。
在这个贴吧学习收获较多,因此向各位大佬看齐,也分享一下学习心得。
内容主要面向新手开发朋友们,同时也欢迎各位大佬指正纠错。最后再附上游戏二维码和微信交流群二维码(手动宣传推广
)。
合成逻辑:
1.参与合成的对象(我们一般会制作成预制体),首先具备一个重要的属性是Level。在合成判别逻辑中,只有两个对象的Level相等,才可以参与合成。比如两个A1,是相同的对象,同时Level也相同,所以可以参与合并。
2.每个对象,设置好碰撞组件属性,尤其碰撞组件的属性collider.tag。因为,在参与合成拖动过程中,可能会与其他不能合成的对象发生碰撞响应。
3.碰撞回调函数的合理利用:
在碰撞发生回调中,保存碰撞的另一个对象。
onCollisionEnter(other:cc.Collider, self:cc.Collider){
if(this.otherCollsionList.indexOf(other) < 0){
this.otherCollsionList.push(other);
}
}
在结束碰撞响应中,移除已完成碰撞的对象
onCollisionExit(other:cc.Collider, self:cc.Collider){
if(this.otherCollsionList.indexOf(other) >=0){
this.otherCollsionList.splice(this.otherCollsionList.indexOf(other),1);
}
}
4.目标合成过程中,将发生拖动对象的操作。因此,在参与合成对象的cc.Node.EventType.TOUCH_END事件回调函数中,首先判断是否存在正在发生碰撞(this.otherCollsionList.length > 0);如果存在发生碰撞,则直接取出另外一个碰撞体other = this.otherCollsionList[0];最后,判断other.tag是能参与合成的对象,同时other对象和self对象是相同对象,并且Level相等,则进行合成,生成Level = Level+1的新目标对象,other和self都直接移除。
大致伪码如下:
start(){
this.node.on(cc.Node.EventType.TOUCH_END, this.touch_end, this);
}
touch_end(e){
// …
if(this.otherCollsionList.length === 0){
return;
}
let other = this.otherCollsionList[0];
if(other.tag === 1)///允许参与合成的标识为1
{
let selfLevel = this.level;
let otherLevel = other.node.getComponent(脚本).level;
let selfType = this.type;
let otherType = other.node.getComponent(脚本).level;
if(selfLevel === otherLevel && selfType === otherType){
///......
/// 这里正式调用合成处理
}
}
}
分享一下这个合成的僵尸小游戏,欢(帮)迎(我)大(刷)家(流)体(量)验。

## 最后,欢迎大家扫码进群一起学习,讨论
(
)



