五、实体分析

来源:互联网 发布:网络投资是真的吗 编辑:程序博客网 时间:2024/06/07 00:29

续接上一节我们已经实现了游戏流程的控制,这一节我们将对游戏中的各个实体进行分析。这个游戏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
原创粉丝点击