五、实体分析

续接上一节我们已经实现了游戏流程的控制,这一节我们将对游戏中的各个实体进行分析。这个游戏PlayState中共计设置了4个实体,分别为:Asteroid、Flying_saucer、Bullet和Player四个实体。

Asteroid为行星,行星分为大中小三种,初始时是大型的行星,被攻击一次分裂为两个中型行星,每个中型行星再次被攻击时分裂为两个小型行星。

Flying_saucer为飞碟,飞碟随机出现在屏幕的左面或右面,同时他行走一段距离后会改变两次方向。

Player为玩家控制的飞机对象,玩家共计三个生命值,这个对象可以向前移动,也可以左右调整方向,同时这个对象可以创建子弹攻击行星和飞碟,然而飞机不可以与行星和飞碟直接相撞,否则会失去一个生命,直至最后一个生命值失去后,页面跳转到GameOverState界面。

Bullet为子弹,player对象可以创建子弹对象,子弹碰撞到行星就会促使行星发生分裂,同时子弹攻击到飞碟就会使飞碟消失。同时飞碟也可以创建子弹对象,飞碟也可以同时攻击行星和玩家。

此时我们为四个对象找出了一些公共的参数如下:

Position:描述了对象的坐标位置;

Vector:向量描述了对象的行走值,也就是每次update时对象的update之前的位置与向量相加得到当前的位置值(update后),从而更新了对象的位置;

Direction:描述对象的行走方向变量,通过这个参数可以修改向量的方向;

Speed:描述了对象的行走速度变量,通过这个参数可修改向量的大小也就是修改了行走的速度;

rotationSpeed:描述了对象的旋转速度;

size:描述了对象的大小;

shape:描述了对象的形状。

接下来我们提供了各个实体中的公用方法如下:

SetPosition(float x,float y):设置对象当前的位置;

Intersect(SpaceObject other):判断两个对象是否相交,返回一个布尔值(实现碰撞检测,判断两个对象是否有相交点);

Contains(float x,float y):判断对象图形内是否包含这个点,返回一个布尔值(实现碰撞检测,判断是否被子弹击中);

Wrap():调整对象如果位置大于屏幕宽或高时其坐标位置的变化,也就是对象高度如果超出了屏幕边界,那么对象的位置就会变为屏幕的最下边界坐标值(对象会从屏幕下边框出现),同样如果对象位置坐标小于0,那么对象的位置就会变为屏幕的最上边界坐标值(对象会从屏幕上边框出现),横向同样原理。

getShapex():返回对象的图形各个点x坐标集合数组;

getShapey():返回对象的图形各个点y坐标集合数组;

getx():返回对象的x坐标;

gety():返回对象的y坐标;

以上就是这个spaceobject方法内包含的公用方法。这样我们可以先创建一个SpaceObject类,让其拥有公用的所有属性和方法,然后再创建我们所需要的实体对象,让其继承这个类。好的本节就分析到这里,下一节我们将继续创建这个spaceobject这个类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吉林南瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值