做飞机 车辆 碰撞大战碰撞检测时,下面的错误是什么意思

更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
使用您的微博帐号登录,即刻尊享微博用户专属服务。
使用您的QQ帐号登录,即刻尊享QQ用户专属服务。
使用您的人人帐号登录,即刻尊享人人用户专属服务。
按住视频可进行拖动
把视频贴到Blog或BBS
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
收藏成功,可进入查看所有收藏列表
方式1:用手机看
用爱奇艺APP或微信扫一扫,在手机上继续观看:
兄弟连沈大海Cocos2d-x视频教程 第9节 《微信飞机大战》碰撞检测
方式2:一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:&&
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:&&
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
爸爸去哪儿2游戏 立即参与
兄弟连沈大海Cocos2d-x视频教程 第9节 《微信飞机大战》碰撞检测
播放量数据:
513人已订阅
你可能还想订阅他们:
{{#needAdBadge}} 广告{{/needAdBadge}}
&正在加载...
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
安装爱奇艺视频客户端,
马上开始为您下载本片
5秒后自动消失
&li data-elem="tabtitle" data-seq="{{seq}}"& &a href="javascript:void(0);"& &span>{{start}}-{{end}}&/span& &/a& &/li&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"& &a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制Cocos2d-x 3.2
lua飞机大战开发实例(二)敌机类的封装,以及碰撞检测的实现
Cocos2d-x 3.2
lua飞机大战开发实例(二)敌机类的封装,以及碰撞检测的实现
[摘要:Cocos2d-X 3.2 lua说话飞机大战开辟真例(两) 1. 敌机类的启拆和碰碰检测 -- Enemy的类中 require Cocos2d local Enemy = class ( Enemy , function () return cc .Node:create() end ) function Enemy :create( t , x , y )]
Cocos2d-X 3.2& lua语言飞机大战开发实例(二)
1.&&敌机类的封装以及碰撞检测
Enemy的类中
require &Cocos2d&
Enemy=class(&Enemy&,function ()
return cc.Node:create()
Enemy:create(t,x,y)
enemy=Enemy.new()
enemy:addChild(enemy:init(t,x,y))
Enemy:ctor()
self.winsize=cc.Director:getInstance():getWinSize()
self.type=0
self.dirH=true
--真为rigth
self.dirV=true
--false& up&& true&down
self.flyWidth=30&
--摇摆的幅度
self.flyX=0&&
--当前的摇摆值
self.count=0&&&&&&&&&&
--控制移动的逻辑执行的次数
Enemy:init(t,x,y)
layer=cc.Layer:create()
sp=cc.Sprite:create()
layer:addChild(sp)
& --敌机动画
&&&& --动画的每一帧
&&&& local
sf1=cc.SpriteFrame:create(&fonts/Resources/ld1.png&,cc.rect(0,0,87,<span style="color:#B9))
&&&& local
sf2=cc.SpriteFrame:create(&fonts/Resources/ld1.png&,cc.rect(87,0,87,<span style="color:#B9))
&&&& local
allf={sf1,sf2}
&&&& --创建动画
&&&& local
animation=cc.Animation:createWithSpriteFrames(allf,<span style="color:#B9)
&&&& local
animate=cc.Animate:create(animation)
&&&& sp:runAction(cc.RepeatForever:create(animate))
sf1=cc.SpriteFrame:create(&fonts/Resources/ld1.png&,cc.rect(0,0,87,<span style="color:#B9))
&&&& local
sf2=cc.SpriteFrame:create(&fonts/Resources/ld1.png&,cc.rect(87,0,87,<span style="color:#B9))
&&&& local
allf={sf1,sf2}
&&&& --创建动画
&&&& local
animation=cc.Animation:createWithSpriteFrames(allf,<span style="color:#B9)
&&&& local
animate=cc.Animate:create(animation)
&&&& sp:runAction(cc.RepeatForever:create(animate))
sf1=cc.SpriteFrame:create(&fonts/Resources/ld2.png&,cc.rect(0,0,87,<span style="color:#B9))
&&&& local
sf2=cc.SpriteFrame:create(&fonts/Resources/ld2.png&,cc.rect(87,0,87,<span style="color:#B9))
&&&& local
allf={sf1,sf2}
&&&& --创建动画
&&&& local
animation=cc.Animation:createWithSpriteFrames(allf,<span style="color:#B9)
&&&& local
animate=cc.Animate:create(animation)
&&&& sp:runAction(cc.RepeatForever:create(animate))
& --设置坐标
& sp:setPosition(x,y)
& self.ex=x
& self.ey=y
& self.type=t
& --计划任务,然敌机自动向下飞
function logic(t)
&self.count=self.count&#43;1 -—控制它的帧率
self.count&5 then
& self.count=0
self.type==0& then
&&&&&&&&&&--自动向下飞
&&&&&&&&&&self.ey=self.ey-10
&&&&&&&&&&if
self.ey&0 then
&&&&&&&&&&& self:removeFromParent()--移除
&&&&&&&&&&& return
&&&&&&&&&&end
&&&&&& elseif&
self.type==1&
&&&&&&&&&&--左右摇摆向下飞
&&&&&&&&&&self.ey=self.ey-2
&&&&&&&&&&if
self.ey&0 then
&&&&&&&&&&&&
&&&&&&&&&&& self:removeFromParent()--移除
&&&&&&&&&&&return
&&&&&&&&&&end
&&&&&&&&&&&&&--摇摆
&&&&&&&&&&&if
self.dirH then&
--向右摇摆
&&&&&&&&&&&&&&self.ex=self.ex&#43;self.flyX--敌机的横坐标&#43;摇摆的&#20540;
&&&&&&&&&&&else
&&&&&&&&&&&&&&& self.ex=self.ex-self.flyX--敌机的横坐标—摇摆的&#20540;
&&&&&&&&&&&end
&&&&&&&&&&&self.flyX=self.flyX&#43;3&&&&&&&
--当前的摇摆&#20540;
&&&&&&&&&&&if
self.flyX&self.flyWidth
then--如果当前的摇摆&#20540;大于摇摆的幅度
&&&&&&&&&&&&&&self.flyX=0&&&&&&&&&&&&&&
--摇摆&#20540;归0
&&&&&&&&&&&&&&self.dirH=not
self.dirH&& --反向
&&&&&&&&&&&end
&&&&&& elseif&
self.type==2&
&&&&&&&&&&&&--飞到屏幕的中央向两侧飞行
&&&&&&&&&&&&if
self.ey&=self.winsize.height/2
&&&&&&&&&&&& self.ey=self.ey-2&&&&&&&--如果在屏幕中间的上方就让它不断乡下走&&&&&&&&&
&&&&&&&&&&&&else
&&&&&&&&&&&&&&& self.ex=self.ex&#43;5&&&&&&&--向右走
&&&&&&&&&&&&&&& if
self.ex&self.winsize.width
--如果大于屏幕的宽度
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& self:removeFromParent()&&&&&&&&&
&&&&&&&&&&&&&&& return
&&&&&&&&&&&&&&& end
&&&&&&&&&&&&end
&&&&&& end
&&&&&& sp:setPosition(self.ex,self.ey)&
--敌机的坐标
&&&&&& sp:scheduleUpdateWithPriorityLua(logic,0)&&
--让这个敌机执行它的计划任务
return Enemy
--这样我们就实现好了敌机类的封装,下面我们就从GameScene中再添加敌机
2.在GameScene的init()中
跟飞机产生子弹的原理一致,首先需要在构造函数中添加一个计数器
& self.countEnemy=0&
--敌机产生的计数器
--添加敌机
--添加敌机
function newEnemy(t)
&& self.countEnemy=self.countEnemy&#43;1
self.countEnemy&=<span style="color:#B9 then
&& &&--产生敌机
&& &&local
newEnemy=require(&nodes.Enemy&)
&& &&--产生随机数--把type定义成随机数
&& &&local
num=math.random()*3--math是lua中的基本函数。math.random()它产生的是0~1的随机数,*3之后变成1~3的随机数
&& &&local
etype=0&& --敌机的类型
then etype=2
then etype=1
then etype=0
&& &&--创建敌机--产生随机的类型--产生随机的飞机坐标
&& &&local
ne=newEnemy:create(etype,math.random()*self.winsize.width,self.winsize.height)
&& &&layer:addChild(ne)
self.countEnemy=0
--给敌机计划任务
node2=cc.Node:create()
layer:addChild(node2)
node2:scheduleUpdateWithPriorityLua(newEnemy,0)
3.碰撞检测的实现,首先要确定的是思路,我们该怎么取到子弹和敌机呢?这样做。。。
产生子弹时,我们不但要将子弹添加到layer中,还要定义table,将子弹添加到table中
在GameData全局数据中定义:
g_allBullet={}—保存所有的子弹
g_allEnemy={}—保存所有的敌机
我们在子弹类的构造函数中,定义:
self.indexInAllBullet=0&&& --当前这个子弹在table集合中的编号
在这里子弹节点删除时,还要将子弹从全局表中删除
table.remove(g_allBullet,self.indexInAllBullet)
--调整编号
i=1,#g_allBullet
&&&&&&&&&&&&&&& if g_allBullet[i].indexInAllBullet&self.indexInAllBulletthen
&&&&&&&&&&&&&&&&&&& g_allBullet[i].indexInAllBullet=g_allBullet[i].indexInAllBullet-1
&&&&&&&&&&&&&&& end
&&&&&&&&&&&end
self.unscheduleUpdate()
在GameScene中子弹产生,添加到layer的同时也要添加这个子弹到全局数据里
newb.indexInAllBullet=#g_allBullet&#43;1&
--记录当前这颗子弹在这个集合中的下标是几
g_allBullet[#g_allBullet&#43;1]=newb&&&&
--#号能够返回这个table中有多少个数据!&#43;1是下标从1开始
--print(&目前子弹的个数&..tostring(#g_allBullet))—-每产生一个子弹都再g_allBullet中
--~~~~~~~~~~~~~~~~~~~~~~~~~~~~
同理,我们也需要将敌机做这样的处理
我们在敌机类的构造函数中,也需要加一个成员属性:
self.indexInAllEnemy=0&&& --当前这个敌机在table集合中的编号
--在这里敌机节点删除时,还要将敌机从全局表中删除
table.remove(g_allEnemy,self.indexInAllEnemy)&& --删除这个表中的这个元素
--后续编号--
&&&&&&&&&&&&&&&&&&& for&
i=1,#g_allEnemydo
&&&&&&&&&&&&&&&&&&&&&&& if g_allEnemy[i].indexOfAllEnemy&self.indexOfAllEnemy
&&&&&&&&&&&&&&&&&&&&&&&&&&& g_allEnemy[i].indexOfAllEnemy=g_allEnemy[i].indexOfAllEnemy-1
&&&&&&&&&&&&&&&&&&&&&&& end
&&&&&&&&&&&&&&&&&&& end
&&&&&&&&&&&&&&&&&&& self:unscheduleUpdate()
在GameScene中敌机产生,添加到layer的同时也要添加这个敌机到全局table里
--把这个敌机添加到全局的table中
&ne.indexOfAllEnemy=#g_allEnemy&#43;1&&--记录当前这个敌机在这个集合中的下标是几&&& &&&&&&&g_allEnemy[#g_allEnemy&#43;1]=ne&&&&&&
--#号能够返回这个table中有多少个数据!&#43;1是下标从1开始
&& &&--print(&目前敌机的数量&..tostring(#g_allEnemy))
--实际上我们的做到这里只是为了做碰撞检测的一个前提,我们已经把所有的敌机和子弹都转化成了table中的数据这样我们就可以实现访问敌机和子弹了—接下来我们就该做碰撞检测了
4.碰撞检测
--增加碰撞检测逻辑
function gamelogic(t)
&&&&&&&--碰撞检测
&&&&&&&--i就是第i个元素,v就是第i个元素的&#20540;,v,还可以写成nowbullet,&g_allBullet返回的是这个元素的编号
--&&&&&&&for i,nowbullet in pairs(g_allBullet) do&&
--&&&&&&&&& for j,nowenemy inpairs(g_allEnemy) do
--&&&&&&&&&
--&&&&&&&&&&&
--&&&&&&&&& end
--&&&&&&&end
&&&&&&&for
i=1,#g_allBullet
do&&&&&&&&&&&&&&--i从1循环到g_allbullet的长度
&&&&&&&&&&&local
nowbullet=g_allBullet[i]&&&
--获取第i个子弹
&&&&&&&&&&&for
j=1,#g_allEnemy
&&&&&&&&&&&&&&& local
nowe=g_allEnemy[j]
&&&&&&&&&&&&&&& local
rect1=cc.rect(nowbullet.bx,nowbullet.by,7,10)
&&&&&&&&&&&&&&& local
rect2=cc.rect(nowe.ex,nowe.ey,87,50)
&&&&&&&&&&&&&&& --print(nowe.ex..&,&..nowe.ey..&,&..nowbullet.bx..&,&..nowbullet.by)
&&&&&&&&&&&&&&& if cc.rectIntersectsRect(rect1,rect2)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&& --子弹消失
&&&&&&&&&&&&&&&&&&& table.remove(g_allBullet,nowbullet.indexInAllBullet)--从全局表里删除自己--table表中的第i个元素消失
&&&&&&&&&&&&&&&&&&& --后续编号--
&&&&&&&&&&&&&&&&&&& for&
i=1,#g_allBulletdo
if g_allBullet[i].indexInAllBullet&nowbullet.indexInAllBulletthen
&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&g_allBullet[i].indexInAllBullet=g_allBullet[i].indexInAllBullet-1
&&&&&&&&&&&&&&&&&&&&&&& end
&&&&&&&&&&&&&&&&&&& end
&&&&&&&&&&&&&&&&&&& nowbullet:unscheduleUpdate()
&&&&&&&&&&&&&&&&&&& nowbullet:removeFromParent()
--将本节点删除
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&& --敌机消失
&&&&&&&&&&&&&&&&&&& table.remove(g_allEnemy,nowe.indexOfAllEnemy)
&&&&&&&&&&&&&&&&&&& --后续编号--
&&&&&&&&&&&&&&&&&&& for&
i=1,#g_allEnemydo
&&&&&&&&&&&&&&&&&&&&&& &&&&&if g_allEnemy[i].indexOfAllEnemy&nowe.indexOfAllEnemy
&&&&&&&&&&&&&&&&&&&&&&&&&&& g_allEnemy[i].indexOfAllEnemy=g_allEnemy[i].indexOfAllEnemy-1
&&&&&&&&&&&&&&&&&&&&&&& end
&&&&&&&&&&&&&&&&&&& end
&&&&&&&&&&&&&&&&&&& nowe:unscheduleUpdate()
&&&&&&&&&&&&&&&&&&& nowe:removeFromParent()
--将本节点删除
&&&&&&&&&&&&&&&&&&& break
&&&&&&&&&&&&&&& end
&&&&&&&&&&&end
&&&&&&&end
node3=cc.Node:create()
&&& layer:addChild(node3)
&&& node3:scheduleUpdateWithPriorityLua(gamelogic,0)
5.在子弹的类这敌机的类中我们也要对后续的table表中的编号进行重整
子弹类的init()的移除子弹处,中我们这样做:
--后续编号--
&&&&&&&&for
i=1 ,#g_allBullet
--要移除的是第i(self.indexInAllBullet)个子弹, 假如我们移除了第2个子弹,我们就让第3个子弹的编号变成2
&&&&&&&&&&&&&&& if g_allBullet[i].indexInAllBullet&self.indexInAllBulletthen
&&&&&&&&&&& g_allBullet[i].indexInAllBullet=g_allBullet[i].indexInAllBullet-1
&&&&&&&& end
&&&&&&&&end
self:unscheduleUpdate()
6.在敌机的类中我们都需要对移除敌机时进行后续编号的一个处理
在敌机类的init()移除敌机中时:
&&&&&&&&&&&&&& --后续编号--
&&&&&&&&&&&&&&& for&
i=1,#g_allEnemydo
&&&&&&&&&&&&&&&&&&& if g_allEnemy[i].indexOfAllEnemy&self.indexOfAllEnemy
&&&&&&&&&&&&&&&&&&&&&&& g_allEnemy[i].indexOfAllEnemy=g_allEnemy[i].indexOfAllEnemy-1
&&&&&&&&&&&&&&&&&&& end
&&&&&&&&&&&&&&& end
&&&&&&&&&&&&&&& self:unscheduleUpdate()
--这样就基本上实现了子弹和敌机碰撞检测了,只是一些效果还没有添加
感谢关注 Ithao123精品文库频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
Swift是Apple在WWDC2014所发布的一门编程语言,用来撰写OS X和iOS应用程序[1]。在设计Swift时.就有意和Objective-C共存,Objective-C是Apple操作系统在导入Swift前使用的编程语言
Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式和添加现代的功能来使得编程更加简单、灵活和有趣。界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向。
IThao123周刊&&&&经典飞机大战资源源码
经典飞机大战资源源码
实现最基本功能,英雄飞机,Boss飞机和子弹的创建和检测碰撞并销毁。
若举报审核通过,可奖励20下载分
被举报人:
shinhwalin
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
移动开发下载排行敌机的不会只有1个,而且也不会只有一种敌机。所以敌机也可以建一个继承与gameobject的父类。命名为EnemyPlane,代码如下:
package com.example.
import android.content.res.R
import android.graphics.C
public class EnemyPlane extends GameObject {
protected int
protected int
protected int bloodV
protected boolean isE
protected boolean isV
public EnemyPlane(Resources resources) {
super(resources);
public void initial(int arg0,float arg1, float arg2){
protected void initBitmap() {
public void drawSelf(Canvas canvas) {
public void release() {
public void logic(){
if(object_y & screen_height){
object_y +=
isAlive = false;
if(object_y + object_height &0){
isVisible = false;
public boolean isCollide(GameObject obj){
if(object_x + object_width &= obj.getObject_x()){
return false;
else if(obj.getObject_x() +obj.getObject_width() &object_x){
return false;
else if(object_y +object_width & obj.getObject_y()){
return false;
else if(obj.getObject_x() + obj.getObject_height() &object_y){
return false;
return true;
public boolean isCanCollide()
return isAlive &&isV
public int getScore() {
public void setScore(int score) {
this.score =
public int getBlood() {
public void setBlood(int blood) {
this.blood =
public int getBloodVolume() {
return bloodV
public void setBloodVolume(int bloodVolume) {
this.bloodVolume = bloodV
public boolean isExplostion(){
return isE
创建一个继承于EnemyPlane的类:
package com.example.
import java.util.R
import android.content.res.R
import android.graphics.B
import android.graphics.BitmapF
import android.graphics.C
import com.example.planewars.R;
public class SmallPlane extends EnemyPlane {
private static int currentCount = 0;
private Bitmap smallP
public static int sumCount =5;
public SmallPlane(Resources resources) {
super(resources);
initBitmap();
this.score = 100;
public void initial(int arg0,float arg1, float arg2){
if (getCurrentCount() & sumCount) {
isAlive = true;
bloodVolume = 1;
blood = 1;
speed = 7;
Random ran = new Random();
object_x = ran.nextInt((int) (screen_width - object_width));
object_y = 0;
setCurrentCount(getCurrentCount() + 1);
public void initBitmap(){
smallPlane = BitmapFactory.decodeResource(resources, R.drawable.small);
object_width = smallPlane.getWidth();
object_height = smallPlane.getHeight()/3;
public void drawSelf(Canvas canvas){
canvas.save();
canvas.clipRect(object_x,object_y, object_x + object_width, object_y + object_height);
canvas.drawBitmap(smallPlane, object_x, object_y,paint);
canvas.restore();
public void release(){
if(!smallPlane.isRecycled()){
smallPlane.recycle();
public int getCurrentCount() {
return currentC
public void setCurrentCount(int currentCount) {
SmallPlane.currentCount = currentC
在factary类里添加创建敌机的方法:
package com.example.
import android.content.res.R
import com.example.object.GameO
import com.example.object.MyP
import com.example.object.SmallP
public class GameObjectFactory {
public GameObject createMyPlane(Resources resources){
return new MyPlane(resources);
public GameObject createSmallPlane(Resources resource){
return new SmallPlane(resource);
然后在mainview里添加创建敌机:
package com.example.
import java.util.ArrayL
import java.util.L
import android.content.C
import android.graphics.C
import android.graphics.P
import android.graphics.RectF;
import android.graphics.T
import android.os.M
import android.view.MotionE
import android.view.SurfaceH
import com.example.object.EnemyP
import com.example.object.GameO
import com.example.object.MyP
import com.example.object.SmallP
import com.example.factory.GameObjectF
public class MainView extends BaseView{
private MyPlane myP
private GameObjectF
private boolean isP
private boolean isTouchP
private List&EnemyPlane& enemyP
private int speedT
public MainView(Context context) {
super(context);
speedTime = 1;
factory = new GameObjectFactory();
enemyPlanes = new ArrayList&EnemyPlane&();
myPlane = (MyPlane) factory.createMyPlane(getResources());
myPlane.setMainView(this);
for(int i=0;i&SmallPlane.sumCi++){
SmallPlane smallPlane = (SmallPlane) factory.createSmallPlane(getResources());
enemyPlanes.add(smallPlane);
thread = new Thread(this);
public void surfaceCreated(SurfaceHolder arg0){
super.surfaceCreated(arg0);
initBitmap();
for(GameObject obj :enemyPlanes){
obj.setScreenWH(screen_width, screen_height);
myPlane.setScreenWH(screen_width, screen_height);
myPlane.setAlive(true);
if(thread.isAlive()){
thread.start();
thread = new Thread(this);
thread.start();
public void surfaceDestoryed(SurfaceHolder arg0){
super.surfaceDestroyed(arg0);
release();
public boolean onTouchEvent(MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_UP){
isTouchPlane = false;
else if(event.getAction() == MotionEvent.ACTION_DOWN){
float x = event.getX();
float y = event.getY();
if(x & myPlane.getObject_x() && x & myPlane.getObject_x() + myPlane.getObject_width()&& y & myPlane.getObject_y() && y & myPlane.getObject_y() + myPlane.getObject_height()){
isTouchPlane = true;
else if(event.getAction() == MotionEvent.ACTION_MOVE && event.getPointerCount() ==1){
if(isTouchPlane){
float x = event.getX();
float y = event.getY();
if(x & myPlane.getMiddle_x() + 20){
if(myPlane.getMiddle_x() + myPlane.getSpeed() & screen_width){
myPlane.setMiddle_x(myPlane.getMiddle_x() + myPlane.getSpeed());
else if(x & myPlane.getMiddle_x() - 20) {
if(myPlane.getMiddle_x() - myPlane.getSpeed() & 0) {
myPlane.setMiddle_x(myPlane.getMiddle_x() - myPlane.getSpeed());
else if(y & myPlane.getMiddle_y() + 20){
if( myPlane.getMiddle_y() + myPlane.getSpeed() & screen_height) {
myPlane.setMiddle_y(myPlane.getMiddle_y() + myPlane.getSpeed());
else if(y & myPlane.getMiddle_y() - 20){
if(myPlane.getMiddle_y() - myPlane.getSpeed() & 0){
myPlane.setMiddle_y(myPlane.getMiddle_y() - myPlane.getSpeed());
return true;
public void initBitmap(){
public void initObject(){
for(EnemyPlane obj:enemyPlanes){
if(obj instanceof SmallPlane){
obj.initial(speedTime, 0, 0);
public void release(){
for(GameObject obj:enemyPlanes){
obj.release();
myPlane.release();
public void drawSelf(){
canvas = sfh.lockCanvas();
canvas.drawColor(Color.BLACK);
myPlane.drawSelf(canvas);
for(EnemyPlane obj:enemyPlanes){
obj.drawSelf(canvas);
if(obj.isCanCollide() && myPlane.isAlive()){
if(obj.isCollide(myPlane)){
myPlane.setAlive(false);
} catch(Exception err){
err.printStackTrace();
if(canvas != null);
sfh.unlockCanvasAndPost(canvas);
public void viewLogic(){
for(EnemyPlane obj:enemyPlanes){
if(obj instanceof SmallPlane){
if(obj.getObject_y() & screen_height){
SmallPlane sPlane = (SmallPlane)
sPlane.setCurrentCount(sPlane.getCurrentCount() - 1);
public void run(){
while(threadFlag){
initObject();
drawSelf();
viewLogic();
Thread.sleep(200);
} catch(InterruptedException e ) {
e.printStackTrace();
运行结果如下图:
由于敌机有多个。用到了list。开始出现的位置是顶部。x坐标随机。出现以后就向下移动。到底部后消失。再从顶部创建。碰到飞机的话会触发飞机爆炸动画。到这里就是一个简单的躲避掉落物品的游戏了
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2366次
排名:千里之外

我要回帖

更多关于 cocos2dx碰撞检测 的文章

 

随机推荐