最近看到网上介绍cocos2d的资料很多,看了看cocos2d也支持wp7,下载了个 Cocos2d-XNA 安装包,写个小例子玩玩,熟悉下cocos2d
程序很简单,就一个入门级的小游戏,写完后放手机里运行了下效果还可以
开发环境 vs2010,windows phone sdk 7.1
实现方法如下
1.创建好 CCLayer 的子类
2.重写 onEnter 方法添加一些基本按钮 跟一些初始化代码
3.通过schedule方法 控制 坦克 子弹的CCSprite对象
4.根据点击手机屏幕,确定出坦克的方向,根据坦克的方向修改坦克的X,Y轴坐标,来实现坦克的移动
5.通过CCRect的CCRectIntersetsRect函数来进行碰撞检测,实现子弹打击坦克
6.代码完成后 安装zune后 就能把游戏部署到手机里面了 部署前手机要绑定开发者帐号或者学生帐号
具体实现代码
1.在项目里面添加枚举类型
/// <summary>
/// 表示方向的的枚举类型
/// </summary>
public enum Direction { L, U, D, R, STOP }
2.添加子弹类的相关常量,属性
/// <summary>
/// 子弹X轴的速度,单位PX
/// </summary>
public static int XSPEED = 10;
/// <summary>
/// 子弹Y轴的速度,单位PX
/// </summary>
public static int YSPEED = 10;
/// <summary>
/// 子弹的宽度
/// </summary>
public static int WIDTH = 15;
/// <summary>
/// 子弹的高度
/// </summary>
public static int HEIGHT = 15;
/// <summary>
/// 子弹的坐标
/// </summary>
int x, y;
/// <summary>
/// 子弹的方向
/// </summary>
Direction dir;
/// <summary>
/// 子弹的存活状态
/// </summary>
private bool live = true;
/// <summary>
/// TankClient窗体实例
/// </summary>
private TankClient tankClient;
/// <summary>
/// 敌我双方的标记
/// </summary>
private bool good;
CCSprite m_missile;
3.添加draw方法来画出子弹
public void Draw()
{
if (!live)
{
tankClient.removeChild(m_missile, true);
tankClient.missiles.Remove(this);
return;
}
m_missile.position = new CCPoint(x, y);
Move();
}
4.添加子弹打击坦克的方法
public bool HitTank(Tank t)
{
//用IntersectsWith来检测两个矩形相碰撞
//if (GetRectangle().IntersectsWith((t.GetRectangle())) && t.Live && this.live && this.good != t.Good)
if (CCRect.CCRectIntersetsRect(GetRectangle(), t.GetRectangle()) && t.Live && this.live && this.good != t.Good)
{
t.Live = false;
this.live = false;
return true;
}
return false;
}
5.添加坦克类相关属性,常量
/// <summary>
/// 坦克x轴的速度
/// </summary>
public static int XSPEED = 5;
/// <summary>
/// 坦克y轴的速度
/// </summary>
public static int YSPEED = 5;
/// <summary>
/// 坦克的宽度
/// </summary>
public static int WIDTH = 58;
/// <summary>
/// 坦克的高度
/// </summary>
public static int HEIGHT = 58;
/// <summary>
/// 坦克的坐标
/// </summary>
private int x, y;
/// <summary>
/// 标记上下左右键是否按下
/// </summary>
private bool l = false, u = false, r = false, d = false;
/// <summary>
/// 坦克的方向
/// </summary>
private Direction dir = Direction.STOP;
/// <summary>
/// 坦克炮筒方向
/// </summary>
private Direction ptDir = Direction.D;
/// <summary>
/// TankClient窗体实例
/// </summary>
TankClient tankClient;
/// <summary>
/// 标记敌我双方
/// </summary>
private bool good;
/// <summary>
/// 控制敌人坦克不规则运行时使用
/// </summary>
private int step = 0;
/// <summary>
/// 标记坦克的存活状态
/// </summary>
private bool live = true;
public CCSprite m_tank;
6.在tank类中实现画坦克方法
public void Draw()
{
if (!live)
{
if (!good)
{
tankClient.removeChild(m_tank, true);
tankClient.tanks.Remove(this);
}
tankClient.removeChild(m_tank, true);
return;
}
if (good)
{
m_tank.position = new CCPoint(x, y);
}
else
{
//g.FillEllipse(Brushes.Blue, x, y, WIDTH, HEIGHT);
m_tank.position = new CCPoint(x, y);
}
//根据炮筒坦克来画出坦克的炮筒
switch (ptDir)
{
case Direction.D:
m_tank.rotation = 0; //旋转精灵控制 炮筒方向
break;
case Direction.U:
m_tank.rotation = 180;
break;
case Direction.L:
m_tank.rotation = 270;
break;
case Direction.R:
m_tank.rotation = 90;
break;
}
Move();
}
7.tank发子弹的方法
public Missile Fire()
{
if (!live) return null;
int x = this.x;
int y = this.y ;
Missile missile = new Missile(x, y, good, ptDir, tankClient);
tankClient.missiles.Add(missile);
return missile;
}
8.CCLayer加入坦克
myTank = new Tank(60,420, true, this);
for (int i = 0; i < 10; i++)
{
//添加10量坦克间距 为70
tanks.Add(new Tank(50 + 70 * (i + 1), 20, false, this));
}
9.CCLayer中调用子弹打击坦克的方法
for (int i = 0; i < missiles.Count; i++)
{
Missile m = missiles[i];
m.HitTank(myTank);
m.HitTanks(tanks);
m.Draw();
}
10.控制坦克移动射击的部分代码
public override void ccTouchEnded(CCTouch touch, CCEvent event_)
{
myTank.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Down);
}
public void hitCallback(CCObject pSender)
{
myTank.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Enter);
}
11.虚拟机中的运行效果
代码下载 http://download.csdn.net/detail/xiaoxiao108/4545620
程序中控制坦克方向的代码处理的不是很好,没有通过虚拟摇杆实现。
如果你发现有什么不合理的,需要改进的地方,邮件联系328452421@qq.com(qq常年不在线,邮件联系) 朱晓 。相互交流 谢谢
分享到:
相关推荐
cocos2d-xna VS2010和VS2012通用模板 添加后打开VS在模板的XNA Game Studio 4.0项下就可以看到相应模板,新建模板后记得引用cocos2d-xna的DLL. ...该路径下还有一个压缩包:cocos2d-xna.zip enjoy it!
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
cocos2d-xna, Cocos2d X的XNA端口 Cocos2D-XNACocos2D-XNA是基于广泛流行和成功的Cocos2D-X引擎的2D 游戏开发引擎。 使用 Cocos2D-XNA,游戏开发者可以创建具有丰富用户体验的神奇游戏,而不会带来私有游戏库巨大的...
cocos2d-x-for-XNA VS2010和VS2012通用模板 添加后打开VS在模板的XNA Game Studio 4.0项下就可以看到相应模板,新建模板后记得引用cocos2d-x-for-XNA的DLL. ...该路径下还有一个压缩包:cocos2d-xna.zip enjoy it!
xna cocos2d-x是一个用C#编写的2D游戏引擎,基于[cocos2d-x][1]和使用MIT 协议。 引擎由 [cocos2d-x][1] 和 [OpenXLive][2] 联合开发。 cocos2d-x for xna is a 2D game engine in C#, based on [cocos2d-x][1] and ...
在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...
cocos2d-x-2.1.5
本书根据大富翁项目一一展开讲解游戏开发过程中涉及的各方面内容,读者可以通过这个游戏的开发,全面掌握Cocos2d-x游戏开发的方法和技巧。 本书理论和实践相结合, 资源太大,传百度网盘了,链接在附件中,有需要的...
Cocos2d-JS---demo 放在服务器上就可以直接预览了,本地打开是黑屏,Cocos2d-JS的方法及效果的演示
cocos2d-x+lua游戏demo源码 xcode工程
资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...
Cocos2d-x是移动跨平台开发最流行的游戏引擎,而本书是一本很全面的、比较‘接地气’的游戏开发教程。书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关...
Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签
刷新Cocos2D-XNA项目以支持最新的MonoGame版本并为更多平台带来支持,XNA的强大功能和Cocos2d的深度在每一个游戏开发人员处都可以再次获得,使他们的创造力达到了95%以上的计算设备上。星球。 Cocos2D-Mon
Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。
精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发
cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656
《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...
cocos2d-x-for-xna-master.zip