赞
踩
1、编写一个简单的鼠标打飞碟(Hit UFO)游戏
UML类图:
因为我参考了前辈的代码,UML类图几乎一样,所以直接借用了(末尾有前辈的链接)。
其中SSAction、SequenceAction、ActionCallBack、ActionManager与上次的牧师与魔鬼几乎相同,所以这次不多加说明,主要关注新增的类。
这个类是SSAction的实现,写了UFO做的动作,包括飞的速度、射出位置、射出角度的方法,以及动作结束的条件。当动作结束,飞碟会等待回收。
public static UFOFlyAction GetSSAction(Vector3 direction, float angle, float power){ //初始化物体将要运动的初速度向量 UFOFlyAction action = CreateInstance<UFOFlyAction>(); if (direction.x == -1) { action.start_vector = Quaternion.Euler(new Vector3(0, 0, -angle)) * Vector3.left * power; }else{ action.start_vector = Quaternion.Euler(new Vector3(0, 0, angle)) * Vector3.right * power; } return action; } public override void Update(){ //计算物体的向下的速度,v=at time += Time.fixedDeltaTime; gravity_vector.y = gravity * time; //位移模拟 transform.position += (start_vector + gravity_vector) * Time.fixedDeltaTime; current_angle.z = Mathf.Atan((start_vector.y + gravity_vector.y) / start_vector.x) * Mathf.Rad2Deg; transform.eulerAngles = current_angle; //如果物体y坐标小于-5,动作就做完了 if (this.transform.position.y < -5){ this.destroy = true; this.whoToNotify.SSActionEvent(this); } }
当场景控制器需要飞碟飞出来时,它会调用上面动作管理类的方法,来控制飞碟飞行。它们的关系可以理解为,飞碟能做的动作在动作管理类,但是飞碟要做什么是由这个控制器控制的,场景控制器决定飞碟在什么情况下动作。
public UFOFlyAction fly; //飞碟飞行的动作
public FirstController scene_controller; //场景管理类
protected void Start() {
scene_controller = (FirstController)SSDirector.GetInstance().CurrentScen
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。