基于JBox2D物理引擎开发的“雷电”小游戏(六)——刚体的销毁

世界中有刚体的诞生,也就有着刚体的销毁。当一个刚体完成它的使命后,我们便要销毁这个刚体。试想一下,在我们的游戏,如果我们放任这个刚体继续存在,一定时间后,我们的“世界”中会充满着刚体!所以我们要在合适的时间销毁掉刚体,释放资源。

设置刚体的属性

为了方便对刚体进行销毁,我们要在创建刚体时设置如下属性。

public abstract class MyBody {//自定义刚体根类
        ……
        boolean isLive = true; //是否绘制
        boolean isDeleted = false;  //是否被删除
        ……
    }

销毁步骤

当我们想要销毁一个刚体时,我们分成两个步骤来进行:
1.在任意的一个函数里(如上一章中碰撞函数),将刚体的isLive属性设置为false。
2.在进行下一帧描绘的时候将isDeleted设置为true并销毁刚体。
这里为什么要分成两步完成呢,原因是如果不在每次描绘画布的时候销毁刚体,而在其他函数中销毁,会造成代码的混乱,比如同时碰撞的时候销毁同一个刚体。
具体销毁刚体的代码如下:

                        for (MyBody mpi : _bl) { //遍历所有刚体
                            if (mpi instanceof MyRectColor) { //判断mpi是否属于MyRectColor
                                MyRectColor mrc = (MyRectColor) mpi;//强制转换
                                if (!mrc.isLive && !mrc.isDeleted) {//判断是否销毁
                                    mrc.isDeleted = true; //设置isDeleted为true
                                    gv.activity.world.destroyBody(mrc.body); //销毁刚体
                                    bl.remove(mpi);//将销毁的刚体移出bl
                                }else {
                                    if(mrc.isObstacle&&isCreateBullet){//判断是否发动攻击
                                        mrc.isCreateBullet = true;//激活敌人的攻击指令
                                    }
                                }
                            }else if(mpi instanceof PlayerBall){//判断是否属于PlayerBall
                                PlayerBall playerBall = (PlayerBall) mpi;//强制转换
                                if(!playerBall.isLive&&!playerBall.isDeleted){//判断是否销毁
                                    playerBall.isDeleted = true;//确认销毁
                                    gv.activity.world.destroyBody(playerBall.body);//销毁刚体
                                    bl.remove(mpi);//将销毁的刚体移出bl
                                }
                            }else if(mpi instanceof Bullet){//判断是否属于Bullet
                                Bullet bullet = (Bullet) mpi;//强制转换
                                if(!bullet.isLive&&!bullet.isDeleted){//判断是否销毁
                                    bullet.isDeleted = true;//确认销毁
                                    gv.activity.world.destroyBody(bullet.body);//销毁刚体
                                    bl.remove(mpi);//将销毁的刚体移出bl
                                }
                            }else if (mpi instanceof Prop) {//判断是否属于Prop
                                Prop prop = (Prop) mpi;//强制转换
                                if (!prop.isLive && !prop.isDeleted) {//判断是否销毁
                                    prop.isDeleted = true;//确认销毁
                                    gv.activity.world.destroyBody(prop.body);//销毁刚体
                                    bl.remove(mpi);//将销毁的刚体移出bl
                                }
                            }
                        }

总而言之,整体思路便是遍历刚体,将isLive属性为false的刚体销毁掉。
恩~~整个游戏在JBox2D上的的技术实现就差不多是这些了,至于剩下的便是游戏逻辑的设定、界面的设计等,相信这些对于大家来说都不会太难,如果有问题可以向我留言或者私信我。
下面给出源码的下载地址:http://download.csdn.net/detail/black__lotus/9562625
大家可以参考着源码进行学习,希望大家都能够玩转JBox2D~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值