一个打麻将小游戏戏 如图 打直升机的

后使用快捷导航没有帐号?
只需一步,快速开始
一步搞定
热门游戏专区:
查看: 5049|回复: 23
在线时间39 小时羁绊3 重爱心公益0 点原创贡献0 克拉最后登录QQ性别保密UID1807197帖子诚信0 点C金26 枚G币0 枚人气0 ℃资源贡献0 盎司阅读权限10注册时间
CG黑铁会员, 积分 242, 距离下一级还需 558 积分
帖子精华0C金26 枚人气0 ℃阅读权限10注册时间
请问大家能不能找到这个游戏啊&&是飞机类的 我小时候在街机厅经常玩的&&就是机战的&&你吃P标示的东西后 可以增加一个小飞机&&一共最多可以增加四个小飞机&&四个小飞机会紧密的跟在你周围 帮你一起打敌人 或者帮你挡子弹& &但是你按住发射建不松几秒后&&这四个小飞机可以聚在一起 变成别的功能的 那个游戏我相当喜欢 请问能发么?& &是叫1942 还是彩金 我不知道了&&谢谢& &有的话 请告诉我&&QQ &&感激涕零
经过漫长的百度 我终于找到了 名字&&strikers 1945&&应该是这个的&&具体请看下图&&如果那个仁兄有&&一定要告诉我哪里下啊&&谢谢啊 谢谢
我找到了 找到了&&但是还缺少个3&&谁有三的话 麻烦补上啊 谢谢各位
.Strikers 1945
.Strikers 1945II
再补发一个雷电给大家吧
雷電1+2 /23MB
.雷電DX /83.4MB
[ 本帖最后由 ambboy 于
22:20 编辑 ]
(106.85 KB, 下载次数: 24)
22:10 上传
点击文件名下载附件
在线时间794 小时羁绊5 重爱心公益0 点原创贡献0 克拉最后登录QQ性别保密UID442133帖子诚信0 点C金2010 枚G币0 枚人气173 ℃资源贡献0 盎司阅读权限30注册时间
CG白银会员, 积分 6256, 距离下一级还需 3744 积分
帖子精华0C金2010 枚人气173 ℃阅读权限30注册时间
打飞机yxh100
在线时间2811 小时羁绊6 重爱心公益0 点原创贡献0 克拉最后登录QQ性别男UID176722帖子诚信0 点C金2885 枚G币1 枚人气0 ℃资源贡献0 盎司阅读权限40注册时间
永远的等待
CG黄金会员, 积分 16177, 距离下一级还需 13823 积分
帖子精华0C金2885 枚人气0 ℃阅读权限40注册时间
应该是1944
在线时间2076 小时羁绊5 重爱心公益0 点原创贡献0 克拉最后登录QQ性别男UID503068帖子诚信0 点C金582 枚G币0 枚人气40 ℃资源贡献0 盎司阅读权限0注册时间
头像被屏蔽
帖子精华0C金582 枚人气40 ℃阅读权限0注册时间
在线时间15971 小时羁绊5 重爱心公益0 点原创贡献0 克拉最后登录QQ性别男UID1533056帖子诚信0 点C金7500 枚G币0 枚人气619 ℃资源贡献0 盎司阅读权限60注册时间
用一点的牌通吃所有的长对......
CG铂金会员, 积分 94803, 距离下一级还需 5197 积分
帖子精华0C金7500 枚人气619 ℃阅读权限60注册时间
去USP汇总帖看看
好象发过PS模拟的
在线时间8450 小时羁绊3 重爱心公益0 点原创贡献0 克拉最后登录QQ性别保密UID1840898帖子诚信0 点C金8846 枚G币0 枚人气20 ℃资源贡献0 盎司阅读权限50注册时间
CG门下一走狗
CG紫晶会员, 积分 52565, 距离下一级还需 7435 积分
帖子精华0C金8846 枚人气20 ℃阅读权限50注册时间
去USP汇总帖看看。。。。。
screen.width*0.7) {this.resized= this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized= this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {} else {window.open('.cn/attachments/month__vDIBxGyKt5CN.jpg');}" onmousewheel="return imgzoom(this);" alt="" />
苟日新 又日新 日日新& &到凌云处总虚心
在线时间1304 小时羁绊4 重爱心公益0 点原创贡献0 克拉最后登录QQ性别保密UID563824帖子诚信0 点C金17986 枚G币0 枚人气870 ℃资源贡献0 盎司阅读权限40注册时间
CG黄金会员, 积分 26071, 距离下一级还需 3929 积分
帖子精华0C金17986 枚人气870 ℃阅读权限40注册时间
去总汇那看看吧。
在线时间7418 小时羁绊3 重爱心公益0 点原创贡献0 克拉最后登录QQ性别男UID1606593帖子诚信0 点C金3781 枚G币0 枚人气33 ℃资源贡献0 盎司阅读权限50注册时间
CG紫晶会员, 积分 42340, 距离下一级还需 17660 积分
帖子精华0C金3781 枚人气33 ℃阅读权限50注册时间
在线时间6220 小时羁绊3 重爱心公益0 点原创贡献0 克拉最后登录QQ性别男UID1633885帖子诚信0 点C金7229 枚G币1 枚人气1338 ℃资源贡献0 盎司阅读权限50注册时间
酱油采购联合会荣誉会长
CG紫晶会员, 积分 42591, 距离下一级还需 17409 积分
帖子精华0C金7229 枚人气1338 ℃阅读权限50注册时间
有一个飞机能中途换机,子弹很多,一般都是打循环通关,多数是用一个长翅膀的人,还有一个尖头的机体,这个机体放炸弹是个圆圆的大饼。是不是这个
在线时间5256 小时羁绊4 重爱心公益0 点原创贡献0 克拉最后登录QQ性别男UID996907帖子诚信0 点C金478 枚G币0 枚人气1361 ℃资源贡献0 盎司阅读权限50注册时间
Tom Clancy's Splinter Cell
CG紫晶会员, 积分 43542, 距离下一级还需 16458 积分
帖子精华0C金478 枚人气1361 ℃阅读权限50注册时间
1945吧,有P
社区推荐 /1
社区盗号猖獗,目前已发现黑客盗取论坛用户账号发布违法信息,建议大家为了账号安全,定期修改密码,以免账号被盗取!
提示:点击左侧图标立即修改!
Powered by扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
vC++课程设计-打飞机游戏
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口8134人阅读
懒骨头(& QQ 青岛 )
又是一个愉快的夜晚
还是那张长长的工作桌
哲哲在左边做一个香云纱手包
骨头在这里噼里啪啦的解刨
pad里放着《赢在中国》
桌子中间各种饮料、奶、水果...
进击吧~骨头~
首先感谢Android技术开发群()的SW同学提供的例子:战神传说
其实就是个打飞机的游戏
1 新建项目,使用create_project.py建立一个空项目
2 将源码文件夹里的.cpp和.h还有资源文件拷贝到新建的项目中
3 用vs2012打开新建的项目
4 添加现有项,把cpp和h文件添加到classes里
一运行,好多错,额,尝试着改改
1&------ 已启动生成: 项目: MoonWarriors, 配置: Debug Win32 ------
Bullet.cpp
1&d:\java\cocos2d-x-2.2\projects\moonwarriors\classes\bullet.h(31): error C2259: “Bullet”: 不能实例化抽象类
由于下列成员:
“void UnitSprite::hurt(void)”: 是抽象的
d:\java\cocos2d-x-2.2\projects\moonwarriors\classes\unitsprite.h(21) : 参见“UnitSprite::hurt”的声明
1&d:\java\cocos2d-x-2.2\projects\moonwarriors\classes\bullet.cpp(6): error C2600: “Bullet::Bullet”: 不能定义编译器生成的特殊成员函数(必须首先在类中声明)
1&d:\java\cocos2d-x-2.2\projects\moonwarriors\classes\bullet.cpp(12): error C2511: “Bullet::Bullet(int,const char *,int)”:“Bullet”中没有找到重载的成员函数
d:\java\cocos2d-x-2.2\projects\moonwarriors\classes\bullet.h(8) : 参见“Bullet”的声明
1&d:\java\cocos2d-x-2.2\projects\moonwarriors\classes\bullet.cpp(46): error C2511: “void Bullet::hurt(void)”:“Bullet”中没有找到重载的成员函数
d:\java\cocos2d-x-2.2\projects\moonwarriors\classes\bullet.h(8) : 参见“Bullet”的声明
1&d:\java\cocos2d-x-2.2\projects\moonwarriors\classes\bullet.cpp(67): warning C4305: “参数”: 从“double”到“float”截断
1&d:\java\cocos2d-x-2.2\projects\moonwarriors\classes\bullet.cpp(68): warning C4305: “参数”: 从“double”到“float”截断骨头不懂C++,尝试着解决下。
首先看这段错误信息:
Bullet.cpp类中,不能实例化
它的父类有几个虚函数,但在Bullet.h文件中,似乎没找到这某个虚函数的定义,好吧,把UnitSprite.h
“Bullet::Bullet”: 不能定义编译器生成的特殊成员函数(必须首先在类中声明)
我们在对应的cpp文件中,添加所有的构造函数:
Bullet(int speed, const char *weapon, int attactMode);
ok,再次运行,看到helloworld窗口了。
可为啥不是游戏界面呢,再改改。。。
AppDelegate.cpp类bool AppDelegate::applicationDidFinishLaunching() 方法中,
实例化CCScene方法改为:CCScene *pScene = StartMenu::scene();
并且加入头文件#include &StartMenu.h&
再次运行 OK!
额,看来需要改成竖屏的。
找到win32包下的main.cpp文件,
把19行的&eglView-&setFrameSize(480, 320);
改为&eglView-&setFrameSize(320, 480);
这次是完全OK了。
游戏截图如上,看起来还怎不错,一个demo做的还比较用心。
不知能否顺利的跑在手机上,走着。
1 首先拷贝资源文件到android系统的assets文件夹下。
2 然后打开android.mk文件,把所有的cpp文件加进去。
3 管理员权限打开cmd,cd到所在目录下,分别使用下面两个命令,修改目录权限
takeown /f * /A /R
icacls * /t /grant:r everyone:f&
4 打开cygwin,定位到D:/Java/cocos2d-x-2.2/projects/LuoLiRun/proj.android 你的android目录文件夹下,运行./build_native.sh命令&
cygwin报错如下:
jni/Android.mk:12: *** 遗漏分隔符 。 停止。
分隔符,难道是Android.mk格式有问题?
很有可能,于是骨头打开Android.mk文件,仔细检查了下,果然,第三行最后少了 反斜杠,最后多了个反斜杠,改之,再次运行
开始编译代码了,但运行到一半又停了,难报错是main.cpp相关。
难道是因为有两个main.cpp?我记得好像demo里有,然后脚本生成的代码里也有。删掉demo里的main.cpp,并且在Android.mk文件里也删掉。
猜对了!再次进行编译了......
几分钟之后,在cygwin里看到了so文件编译成功。
为了不打扰哲哲休息,骨头决定截稿,明天继续!
------------------- 飞船起飞-------------------- & &
-------------------- 飞船降落--------------------&
最后,骨头介绍一下陪在身边的哲哲(右边就是低调的哲哲)
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:424932次
积分:5104
积分:5104
排名:第1832名
原创:75篇
译文:26篇
评论:475条
家里到处都挂着可爱的小物件
而这所有的
都是哲哲一针一线用心做的
骨头喜欢这些手作
更喜欢热爱生活的哲哲该系列其他文章
Cocos2d-HTML5游戏引擎,编写一个简单的打飞机游戏
游戏的主题设计理念总是让人兴奋。在我看来,学徒级别的独立游戏设计这或开发人员应该选择一个小型的经典案例来分析比读一百篇纯理论更实用。所以在本例中,我使用JavaScript语 言编写一个基本的经典游戏:JetFighter。它有趣和简单,设计和实现也并不难完成。而且也很容易上手。用你的拇指触摸手机屏幕。移动你的喷气式战斗机, 避免敌人的子弹和试图击落你所看到的每一架敌机。
首先,我需要一个游戏引擎 -- Cocos2d-html5,用Javascript编写的,基于HTML5技术。
Cocos2d-html5游戏引擎是一个Cocos2d-x的分支。它的目标定位在安装有支持html5技术浏览器的台式电脑,平板电脑当然还有手机上。然后我们还需要一个编辑工具来完成编码。(我选择了工具-webstorm。)和一个浏览器来显示结果。(我选择了Google Chrome,因为Cocos2d-html5基于HTML5技术,而Google Chrome是最支持HTML5的浏览器。
我设置了一个开发环境:
游戏引擎: &
打开下载好的引擎。你会在模板文件夹里看到以下文件:
目录结构简单叙述:
1. res:资源存放目录
2. src:脚本存放目录(我们自己项目的源码目录)
3. build.xm:对引擎进行编译成js脚本形式所用的文件
4. cocos2d.js:对引擎进行参数设置的配置文件
5. index.html:运行程序的网页
6. main.js:主程序入口
1) 运行“Hello World”
右键单击“index.html”选择“在浏览器中打开”。如果一切情况正常的话,你就会看到像这样的图片。这说明你现在成功了。&
Hello Cocos2d
2) 基础知识:
在我进一步深入之前。有一些HTML5的基本知识我应该知道(如果你已经知道了这些,你可以越过这部分):
首先,CCDirector(前缀“CC”是这个引擎函数的前缀)在Cocos2d-html5引擎里,CCDirector是导演、领导,它控制一切,场景、层和精灵。&
Thebasic structure (Left: Chinese, Right: English)
第二,CCCamera,例如,每次当节点缩小,放大或旋转等等,引擎都需要继承CCCamera再次渲染。
第三,CCScene,我们可以简单的认为这是准备上演演出的舞台。
第四,CCLayer,类似于CCScene像是舞台上的背景。但CCLayer是灵活的,它可以使各种各样的组合,所以和CCLayer比较的话CCScene更为静态。CCLayer应该加载在CCScene上。
Different Layer Combination
第五,CCSprite,非常容易理解,包括人物、敌人、NPC(Non-player character)和一些我们可以与之互动的物体。它可以添加在CCSCene和CCLayer之上。
第六,CCAction,这是控制CCsprite的主要功能,如何移动或反应。&
Thepicture used for bullets
The picture used for jet fighter
3) 开始编码
现在,我将开始编码,你已经看到上面的图片。在我的新创建的文件夹(简单地复制文件夹里的“模板”)。把上面的图片放在“res”文件夹(这是你的图片应在的地方)。并注册每一个我们需要的资源图片。js”(我将它命名为s_Jet当我注册它时)。&
Copy & Paste
接下来,我们注册下我们将要用到的图片资源。(每一次有新的图片会被使用的话,你都应该记得在这里注册它。)&
Theresource file
var s_HelloWorld = "HelloWorld.jpg"; // 开始界面背景图片
var s_CloseNormal = "CloseNormal.png"; // 可删除
var s_CloseSelected = "CloseSelected.png"; // 可删除
var s_Menu = "menu.png"; // 按钮图片
var s_bg01 = "bg01.jpg"; // 背景
var s_bullets = "bullets.png"; //敌我子弹图片
var s_Jet = "Jet.png"; // 敌我飞机图片
var g_resources = [//image{src:s_HelloWorld},
{src: s_CloseNormal},{src: s_CloseSelected},
{src: s_Menu},{src: s_bg01},{src: s_Jet},
{src: s_bullets}
4) 开始界面
首先,我们把原本的界面改成开始界面。删除init:function(){}里原本的代码。
var MyLayer = cc.Layer.extend({
``````init:function() {``````deleteall of them 删掉``````}});
在init:function(){}添加这些代码:
this._size = cc.Director.getInstance().getWinSize(); // 获得游戏屏幕尺寸
this.gameLayer = cc.Layer.create(); // 创建名为“gameLayer”的新图层
this.addChild(this.gameLayer); //加在这个新图层
var bg = cc.Sprite.create(s_HelloWorld); // 创建精灵加载图片“s_HelloWorld”
this.gameLayer.addChild(bg, 1); //在gameLayer层上加载这个精灵
bg.setAnchorPoint(cc.p(0.5, 0.5));// 设置锚点
bg.setPosition(this._size.width / 2, this._size.height /2);// 设置位置
这里,我们创建了一个图层并且和图片“s_HelloWorld”一起载入。设定了图片的位置和锚点。
接下来,我们为“新游戏”按钮添加一个方法来变换场景并创建一个新的层来展示我们的游戏。
添加这个方法在init:function (){}的后面:
onNewGame:function (pSender)
this._size = cc.Director.getInstance().getWinSize(); // 获得屏幕尺寸大小
var scene = cc.Scene.create(); //创建新场景
var gsl = new GameSceneLayer(); //创建新场景
gsl.init(); // 初始化新图层scene.addChild(gsl,1); // 加载新场景
var bgLayer = cc.Layer.create(); // 创建新层
var bkPng = cc.Sprite.create(s_bg01); // 创建新精灵并加载图片
bgLayer.addChild(bkPng); // 将精灵加在进层
bkPng.setAnchorPoint(cc.p(0.5, 0.5)); // 设置锚点
bkPng.setPosition(this._size.width / 2,this._size.height / 2); // 设施位置
scene.addChild(bgLayer,0); //将层加载进场景
cc.Director.getInstance().replaceScene(cc.TransitionFade.create(1.2,scene));} // 场景切换
现在,开始界面基本完成了。如果你按下“新游戏”按钮,就会有问题。即使我们已经创建了“GameSceneLayer”层,但它目前还没有被定义。
Start interface
所以我们接下来要它工作起来。
把这一个打进“myApp.js”文件的顶部。
var GameSceneL
加在“var MyLayer = cc.Layer.extend({```})” 的后面:
GameSceneLayer = cc.Layer.extend({isMouseDown: false, // 鼠标反转:否
helloImg: null,
// 设为全局变量,内容为“空”
helloLabel: null, //设为全局变量,内容为“空”
circle: null,
// 设为全局变量,内容为“空”
sprite: null,
// 设为全局变量,内容为“空”
_size: null,
// 设为全局变量,内容为“空”
gameLayer: null,
// 设为全局变量,内容为“空”
gameLayer02: null, // 设为全局变量,内容为“空”
_jetSprite: null, // 设为全局变量,内容为“空”
init: function () {this._super(); //
必须调用父类init()方法,很多bug都是由于没有调用父类init()方法造成的
this._size = cc.Director.getInstance().getWinSize();
this.gameLayer02 = cc.Layer.create();
this.addChild(this.gameLayer02);
this._jetSprite = cc.Sprite.create (s_Jet);
this._jetSprite.setAnchorPoint(0.5, 0.5);
this._jetSprite.setPosition(this._size.width / 2,this._size.height / 5);
this._jetSprite.setScale(0.25);
this.gameLayer02.addChild(this._jetSprite, 0);
this.setTouchEnabled(true);
// 设置触摸模式为:可用
this.setKeyboardEnabled(true);
// 设置键盘为:可用
this.setMouseEnabled(true);
// 设置鼠标为:可用
this.setPosition(new cc.Point(0, 0));},
我们定义了“GameSceneLayer”并创建了代表我们战斗机的精灵。我们设置了它的锚点,位置和尺寸。把这个精灵加进“gameLayer02”层。还有,我们设置触摸、键盘和鼠标为可使用。&
After clicking the Start button
如我们所见,飞机已经被创建了,但是根本不能动。即使我们已经把鼠标、键盘和触摸设置为可用。
在“MyGameLayer”中添加这些方法:
onMouseDragged:function (event) { // 方法:鼠标拖动事件记录
this.processEvent(event);
// 调用方法
processEvent
processEvent:function(event) {
var delta = event.getDelta(); // 获得触摸位移
var curPos = this._jetSprite.getPosition(); // 获得飞机位置
curPos= cc.pAdd(curPos, delta); // 触摸位移+ 原本飞机位置= 新的飞机位置
curPos= cc.pClamp(curPos, cc.POINT_ZERO, cc.p(this._size.width, this._size.height)); // 触摸范围(超出屏幕无效)
this._jetSprite.setPosition(curPos);// 设定飞机新位置}
这两个方法会获取鼠标或手指的碰触地点。并把位移转换给飞机。
如果这里只有飞机飞来飞去却没有子弹,这一定会变得很无聊。所以我们要使他们能够发射子弹。
在“init:function () {}”中添加这个“计划表”
this.schedule(this.addBullet, 0.3); //
每0.3秒更新一次addBullet方法
添加这个方法进入“init:function(){}”:
addBullet:function(){
var jetPosition = this._jetSprite.getPosition(); //
获得飞机位置
var bulletDuration = 1;
子弹完成动作所需时间:1 秒(从屏幕底到屏幕顶)
var bullet = cc.Sprite.create(s_bullets, cc.rect(0, 0, 33, 33));
获取在子弹图片内指定范围的内容
bullet.setPosition(cc.p(jetPosition.x,jetPosition.y + bullet.getContentSize().height)); //
设定子弹位置,和飞机位置相同
var timeScale = ((this._size.height - jetPosition.y -bullet.getContentSize().height / 2) / this._size.height); //
根据子弹出现的位置不同计算相应的子弹穿越时间
var actionMove = cc.MoveTo.create(bulletDuration * timeScale,cc.p(jetPosition.x,this._size.height));
// 设定子弹动作
var actionMoveDone =cc.CallFunc.create(this.spriteMoveFinished, this);// 设定子弹动作
bullet.runAction(cc.Sequence.create(actionMove,actionMoveDone));//
运行子弹移动动作
this._bullets.push(bullet);// 将子弹添加进数组
this.gameLayer02.addChild(bullet,0);
将子弹加载进层中},
现在我们有了子弹。但是如你所见,这些子弹并不会消失。这会让你的电脑变卡变慢。所以我们最好把他们清理掉。&
The bullets won't disappear
把他们添加进“addBullet:function(){}”
this._bullets = []; //
创建子弹数组bullet.setTag(6); //
将子弹标记为“6”
在“addbullet:function(){}”后面添加这个方法
spriteMoveFinished:function(sprite){// 将元素移除出
Layerthis.gameLayer02.removeChild(sprite,true);
if(sprite.getTag()==6){// 把子弹从数组中移除
var index = this._bullets.indexOf(sprite);
// 遍历数组中的子弹
if(index & -1) {
this._bullets.splice(index,1);
// 删除数组中的子弹
在“MyGameLayer”的顶部:
_targets:null,
// 设定敌机的全局变量
加进init:function(){}:
this._targets= []; // 敌机数组
this.schedule(this.addTarget,0.5);
// 每0.5秒更新一次方法addTarget
加在“addBullets:function(){}”之后:
addTarget:function(){
var target = cc.Sprite.create(s_Jet); // 创建并载入敌机(图片和我放飞机一样)
target.setScale(0.33); // 设置尺寸比例
target.setRotation(180); // 设置角度,旋转180度
var minRange = target.getContentSize().width / 2;
// 获得最小移动范围:图片尺寸的二分之一
var maxRange = this._size.width -target.getContentSize().width / 2; // 获得最大移动范围:屏幕宽度减去图片尺寸的二分之一
var showUpPosition = Math.random() * this._size.
// 随机出现地点
var minDuration = 2.5;
var maxDuration = 10.0;
var differentDuration = maxDuration - minD
var actualDuration = Math.random() * differentDuration +minD
//实际飞行时间
target.setPosition(cc.p(showUpPosition,this._size.height)); // 设置敌机出现地点
var actionMove = cc.MoveTo.create(actualDuration,cc.p(showUpPosition, 0 - target.getContentSize().height));
var actionMoveDone =cc.CallFunc.create(this.spriteMoveFinished, this);
target.runAction(cc.Sequence.create(actionMove,actionMoveDone));
target.setTag(1);
this._targets.push(target);
this.gameLayer02.addChild(target, 0);
8) 敌机子弹
我们的敌人并不是神风敢死队。他们也会向你射击。所以:
加在“MyGameLayer”的顶部:
_enemyBullet:null,
加在“init:function(){}”的里面:
this._enemyBullet = [];
// 创建敌机子弹数组
加进“addTarget(){}”
var enemyBullet = cc.Sprite.create(s_bullets, cc.rect(0,50, 33, 70));
enemyBullet.setRotation(180);
for(i in this._targets) {
// 遍历敌机数组,获取敌机位置,并赋值给敌机子弹
var targetThisOne = this._
var targetPosition = targetThisOne.getPosition();
enemyBullet.setPosition(targetPosition.x,targetPosition.y);
var enemyBulletDuration = 2;
// 子弹时间
var enemyBulletTime = enemyBulletDuration *(targetPosition.y / this._size.height); // 实际子弹时间
var ebActionMoveTo = cc.MoveTo.create(enemyBulletTime,cc.p(showUpPosition, -enemyBullet.getContentSize().height));
var ebActionMoveDone =cc.CallFunc.create(this.spriteMoveFinished, this);
enemyBullet.runAction(cc.Sequence.create(ebActionMoveTo,ebActionMoveDone)); // 子弹动作
enemyBullet.setTag(5); // 设置子弹标签为5
this._enemyBullet.push(enemyBullet); // 推入数组中
this.gameLayer02.addChild(enemyBullet, 1); // 将子弹载入层中
为了清理掉敌人和敌人的子弹,所以我们对“spriteMoveFinished:function(sprite){}”做出一些改变。让这个方法变得更加复杂。
spriteMoveFinished:function(sprite){
// 精灵完成动作后将其移除
this.gameLayer02.removeChild(sprite, true);
if(sprite.getTag == 6){ // 如果目标的标签为6,则遍历子弹的数组,将里面的内容删除
var index01 = this._bullets.indexOf(sprite);
if(index01 & -1) {
this._bullets.splice(index01, 1);
} else if(sprite.getTag == 1){
// 如果目标标签为1,则遍历敌机数组,将里面的内容删除
var index02 = this._targets.indexOf(sprite);
if(index02 & -1) {
this._targets.splice(index02, 1);
} else if(sprite.getTag == 5){
// 如果目标标签为5,则遍历敌机子弹数组,将里面的内容删除
var index03 = this._enemyBullet.indexOf(sprite);
if(index03 & -1) {
this._enemyBullet.splice(index03, 1);
Across through
子弹和飞机会穿过对方。他们并不会损毁。所以我们要编写“碰撞检测”的代码。
9) 碰撞检测
在init:function(){}的里面:
this.schedule(this.updateGame);
// 更新updateGame方法(未填入时间,则默认和游戏帧数频率相同)
加在addTarget(){}的后面:
updateGame: function(){
var targets2Delete = [];
// 添加敌机删除数组,相撞的会被存储在这,之后删除
var jetFighterRect = this._jetSprite.getBoundingBox();
var enemyBulletsDelete = [];
// 添加敌机子弹数组,相撞的会被存储在这,之后删除
// 与敌机子弹碰撞,消除敌机子弹
for(i in this._enemyBullet){
// 遍历敌机子弹
var enemyBulletsKill = this._enemyB
// 获取数组中的第i个子弹
var enemyBulletRect = enemyBulletsKill.getBoundingBox(); // 获得相应子弹的图片边界
if (cc.rectIntersectsRect(enemyBulletRect,jetFighterRect)){
// 判断敌机子弹图片是否和我方战机图片有交集的部分
enemyBulletsDelete.push(enemyBulletsKill); // 将有交集的子弹送入敌机子弹删除数组
for(i in enemyBulletsDelete){
// 将敌机子弹删除数组中的内容删除
var enemyBulletRemove = enemyBulletsD
var index =this._enemyBullet.indexOf(enemyBulletRemove);
if(index & -1){
this._enemyBullet.splice(index, 1);
this.gameLayer02.removeChild(enemyBulletRemove);
enemyBulletsKill =
// 敌机与我方子弹|| 飞机碰撞,消除我方子弹|| 飞机和敌机
for(i in this._targets){ // 遍历所有敌机
var target = this._
// 获取第i个敌机
var targetRect = target.getBoundingBox(); // 获取相应敌机的图片边界
var bullets2Delete = [];
// 我方子弹删除数组
var targetRemove = [];
// 敌机删除数组
if (cc.rectIntersectsRect(targetRect, jetFighterRect)){ // 判断敌机和我方战机是否有交集
targetRemove.push(target);
// 将有交集的敌机送入数组中
for(i in targetRemove){ // 遍历删除数组中的内容并删除
var targetAway = targetR
var index = this._targets.indexOf(targetAway);
if(index & -1){
this._targets.splice(index, 1);
this.gameLayer02.removeChild(targetAway);
for(i in this._bullets){ // 子弹和敌机的碰撞检测,原理同上
var bullet = this._
var bulletRect = bullet.getBoundingBox();
if(cc.rectIntersectsRect(bulletRect, targetRect)){
bullets2Delete.push(bullet);
if(bullets2Delete.length & 0){
targets2Delete.push(target);
for(i in bullets2Delete){
var bullet = bullets2D
var index = this._bullets.indexOf(bullet);
if(index & -1){
this._bullets.splice(index, 1);
this.gameLayer02.removeChild(bullet);
bullets2Delete =
for(i in targets2Delete){
var target = targets2D
var index = this._targets.indexOf(target);
if(index & -1) {
this._targets.splice(index, 1);
this.gameLayer02.removeChild(target);
targets2Delete =
Killthe enemy
10) 生命值 & 计分
在”MyGameLayer”的顶部:
lives01:null,
// 设定为全局变量
number:null,
// 设定为全局变量
// 设定为全局变量,并赋值为0
scoreBoard:null,
// 设定为全局变量
inside init:function(){}:
this.score = 0;
this.scoreBoard =cc.LabelTTF.create(this.score,"Impact", 28);
// 创建这个字符,设置了字体和大小
this.scoreBoard.setPosition(3 * this._size.width / 4,this._size.height - 40);
// 设置字体
this.gameLayer02.addChild(this.scoreBoard, 6); // 加载进层
this.number = 10; // 设立生命值为10
this.lives01 = cc.LabelTTF.create(this.number,"Impact", 28);
this.lives01.setPosition(this._size.width / 4,this._size.height - 40);
this.gameLayer02.addChild(this.lives01, 5);
在Update()之后添加:
reduceLives:function(){
this.number -= 1;
// 调用这个方法时number数减1
this.lives01.setString(this.number);
// 更新生命值数值
在“Update:function(){}:”里,更新方法:
if (cc.rectIntersectsRect(enemyBulletRect,jetFighterRect)){
// 判断如果和敌机子弹相撞则减少生命值,并推入删除数组
this.reduceLives();
enemyBulletsDelete.push(enemyBulletsKill);
if (cc.rectIntersectsRect(targetRect, jetFighterRect)){
// 判断如果敌机和我方战机相撞,则减少生命值,并推入删除数组
this.reduceLives();
targetRemove.push(target);
for(i in this._bullets){
var bullet = this._
var bulletRect = bullet.getBoundingBox();
if(cc.rectIntersectsRect(bulletRect, targetRect)){
bullets2Delete.push(bullet);
this.score += 100;
// 每干掉一架敌机则加上100分
this.scoreBoard.setString(this.score);
// 更新数值
Lives & Score
我们遇到麻烦了。即使生命值非常的低,我们的飞机仍然在飞。我们现在就要让他停下来。&
Low on lives
更新方法:
reduceLives:function(){}
reduceLives:function(){
this.number -= 1;
this.lives01.setString(this.number);
if (this.number == 0){
var gameOverScene = GameOverScene.create();// 创建结束场景
cc.Director.getInstance().replaceScene(cc.TransitionProgressRadialCCW.create(1.2,gameOverScene));
11) 结束场景
创建一个新的“JS”文件用来创建场景(结束场景)。
命名为:GameOverScen,添加进“Cococs2d.js”
创建一个新的图层:
var GameOverLayer = cc.LayerColor.extend({
init:function(){
this._super();
this.setColor(cc.c4(126, 126, 126, 126));
var winSize = cc.Director.getInstance().getWinSize();
var _label = cc.LabelTTF.create("GameOver","Arial", 60);
_label.setPosition(cc.p(winSize.width / 2,winSize.height / 2));
this.addChild(_label);
GameOverLayer.create = function(){
var gameOverLayer = new GameOverL
if(gameOverLayer && gameOverLayer.init()){
return gameOverL
var GameOverScene = cc.Scene.extend({
_layer:null,
init:function(){
this._layer = GameOverLayer.create();
this.addChild(this._layer);
GameOverScene.create = function(){
var scene = new GameOverS
if(scene && scene.init()){
Ending Scene
13) 背景音乐
最后一部分:添加背景音乐。
在init:function(){}:里面:
var audioEngine = cc.AudioEngine.getInstance();
audioEngine.playMusic("res/Sounds/background.mp3",true);
Addinto onNewGame:function(){}
添加进方法:onNewGame:function()
var musicStop = cc.AudioEngine.getInstance();
musicStop.stopMusic("res/Sounds/background.mp3");
Add into onNewGame:function(){}
添加进方法:onNewGame:function()
var anotherMusicPlay = cc.AudioEngine.getInstance();
anotherMusicPlay.playMusic("res/Sounds/BGM.mp3",true);
Add into reduceLives:function(){}
添加进方法:reduceLives:function()
reduceLives:function(){
var musicStop = cc.AudioEngine.getInstance();
musicStop.stopMusic("res/Sounds/BGM.mp3");
原帖地址:
来源网址:
图挂了呢。。。
gamexgb 23:05:55
有没高手用3.0实现这个游戏,我用3.0的时候还真遇到不少问题
你这个文章里面没有讲清楚updateGame方法在哪儿调用,调用的频率是怎么样的,这个很重要,我觉得应该是以一定的频率从游戏一开始就一直在跑,知道游戏结束。
rocktsai 11:43:10
回复 仔细看文章, 在代码的注释中已经有提
s 15:49:06
文章后面几幅图木有显示出来!
s 15:47:43
谢谢作者的分享,我是一个cocos初学者,很多地方还不懂,希望可以请教!
liangshanbo 11:15:39
我想问一下,New Game 按钮是怎么加上去的,事件又是怎么绑定的?
能把所有资源都打包上传一下吗?谢谢!
cocopeng 22:17:43
回复 亲,小编认为跟着教程一步一步学更能快速掌握游戏开发技巧呢~~还能了解自己在学习过程中遇到的问题,可以随时与大家交流~~
能不能转义好一点呢?????????全是li
cocopeng 10:34:34
回复 很抱歉给您带来的阅读上的不便,全文代码格式已调整~~~
评论内容不能为空。}

我要回帖

更多关于 打麻将小游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信