位置: 编程技术 - 正文

Cocos2d-x碰撞检查与消灭的实现(cocos creator 碰撞检测)

编辑:rootadmin
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" using namespace cocos2d; class HelloWorld : public cocos2d::CCLayerColor { public: // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer) virtual bool init(); // there's no 'id' in cpp, so we recommend to return the class instance pointer static cocos2d::CCScene* scene(); // a selector callback void menuCloseCallback(CCObject* pSender); // preprocessor macro for "static create()" constructor ( node() deprecated ) CREATE_FUNC(HelloWorld); void addTarget(); void spriteMoveFinished(CCNode *sender); void gameLogic(cocos2d::CCTime dt); void ccTouchesEnded(CCSet *touches, CCEvent *event); CCArray *aarayTarget;//敌人 CCArray *arrayProjectile;//飞镖 void update(CCTime dt); }; #endif // __HELLOWORLD_SCENE_H__ HelloWorldScence.cpp[objc] view plaincopyprint?#include "HelloWorldScene.h" #include "SimpleAudioEngine.h" using namespace cocos2d; using namespace CocosDenshion; CCScene* HelloWorld::scene() { // 'scene' is an autorelease object CCScene *scene = CCScene::create(); // 'layer' is an autorelease object HelloWorld *layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene; } // on "init" you need to initialize your instance bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( CCLayerColor::initWithColor(ccc4(, , , )) ) { CCSize winSize = CCDirector::sharedDirector()->getWinSize();//获取屏幕大小 arrayProjectile = CCArray::create(); aarayTarget = CCArray::create(); float sprite_scale = 2.0; CCSprite *Player = CCSprite::create("Player.png"); Player->setScale(sprite_scale); Player->setPosition(ccp(Player->getContentSize().width*sprite_scale/2.0, winSize.height/2.0)); this->addChild(Player); aarayTarget->retain(); arrayProjectile->retain(); this->schedule(schedule_selector(HelloWorld::gameLogic), 1.0); this->schedule(schedule_selector(HelloWorld::update)); this->setTouchEnabled(true); return true; } else{ return false; } } void HelloWorld::gameLogic(cocos2d::CCTime dt){ this->addTarget(); } void HelloWorld::addTarget(){ CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCSprite *target = CCSprite::create("Target.png"); //随机位置 int minY = target->getContentSize().height/2.0; int maxY = winSize.height - target->getContentSize().height/2.0; int rangeY = maxY - minY; int actualY = rand()%rangeY &#; minY; target->setPosition(ccp(winSize.width - target->getContentSize().width/2.0, actualY)); target->setTag(1); this->addChild(target); aarayTarget->addObject(target); //随机速度 float minDuration = 2.0; float maxDuration = 4.0; int rangeDuration = maxDuration - minDuration; float actualDuration = rand()%rangeDuration &#; minDuration; CCFiniteTimeAction *actionMove = CCMoveTo::create(actualDuration, ccp(0 - target->getContentSize().width/2.0, actualY));//0代表屏幕外,这句表示在3秒内从初始位置移动到屏幕外 //增加一个回调函数,回收移动到屏幕外的精灵 CCFiniteTimeAction *actionMoveDone = CCCallFuncN::create(this, callfuncN_selector(HelloWorld::spriteMoveFinished)); target->runAction(CCSequence::create(actionMove,actionMoveDone,NULL)); } void HelloWorld::spriteMoveFinished(cocos2d::CCNode *sender){ CCSprite *sprite = (CCSprite *)sender; // this->removeChild(sprite, true); if (sprite->getTag() == 1) { aarayTarget->removeObject(sprite);//清除敌人 }else if(sprite->getTag() == 2){ arrayProjectile->removeObject(sprite);//清除飞镖 } } //发射飞镖 void HelloWorld::ccTouchesEnded(cocos2d::CCSet *touches, cocos2d::CCEvent *event){ CCTouch *touch = (CCTouch *)touches->anyObject(); CCPoint location = touch->getLocationInView(); location = this->convertTouchToNodeSpace(touch); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCSprite *projectile = CCSprite::create("Projectile.png"); projectile->setPosition(ccp(, winSize.height/2)); float offX = location.x - projectile->getPositionX(); float offY = location.y - projectile->getPositionY(); if (offX <= 0) { return; } projectile->setTag(2); this->addChild(projectile); arrayProjectile->addObject(projectile); float angle = offY/offX; float realX= winSize.width &#; projectile->getContentSize().width/2; float realY = realX * angle &#; projectile->getPositionY(); CCPoint finalPosition = ccp(realX, realY); //获取飞镖飞行时间 float length = sqrtf(realX *realX &#; realY*realY); float velocity = ; float realMoveDuration = length/velocity; projectile->runAction(CCSequence::create(CCMoveTo::create(realMoveDuration, finalPosition),CCCallFuncN::create(this, callfuncN_selector(HelloWorld::spriteMoveFinished)),NULL)); } //碰撞检测,消除飞镖和敌人 void HelloWorld::update(cocos2d::CCTime dt){ for (int i = 0; i < aarayTarget->count(); i&#;&#;) { CCSprite *target = (CCSprite *)aarayTarget->objectAtIndex(i); for (int j = 0; j < arrayProjectile->count(); j&#;&#;) { CCSprite *projectile = (CCSprite *)arrayProjectile->objectAtIndex(j); if (target->boundingBox().intersectsRect(projectile->boundingBox())) { aarayTarget->removeObjectAtIndex(i); arrayProjectile->removeObjectAtIndex(j); this->removeChild(target); this->removeChild(projectile); break; } } } } void HelloWorld::menuCloseCallback(CCObject* pSender) { CCDirector::sharedDirector()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0); #endif }

推荐整理分享Cocos2d-x碰撞检查与消灭的实现(cocos creator 碰撞检测),希望有所帮助,仅作参考,欢迎阅读内容。

Cocos2d-x碰撞检查与消灭的实现(cocos creator 碰撞检测)

文章相关热门搜索词:cocoscreator碰撞,碰撞检测unity,cocos 碰撞,cocoscreator碰撞,cocos2dx碰撞检测,cocos 碰撞,cocos creator 碰撞检测,cocos2dx碰撞检测,内容如对您有帮助,希望把文章链接给更多的朋友!

非常好的cocos2d-x开发学习教程 COCOS2D开发者文档cocos2d,开发,IT,程序,教程,动画,游戏,文档,cocos2dxCOCOS2D-X开发者文档,一次下载不需要联网,所有资源单机,教程资源非常详细,包括:coc

在win7上python2.7环境下安装cocos-d-0.6.0 1.下载安装pyglet-1.2alpha1。由于我的系统已经安装python2.7,需自行安装pyglet下载地址:

OSX下cocos-2d的安装注意事项 1.同上篇win7中安装的基本步骤一样。先下载并安装pyglet1.2alpha版本。不过请使用root权限来安装。如果不清楚root密码,请按如下进行密码更改。MacBook-Air:~

标签: cocos creator 碰撞检测

本文链接地址:https://www.jiuchutong.com/biancheng/369144.html 转载请保留说明!

上一篇:Cocos2d-js入门学习笔记(cocos2dx4.0入门)

下一篇:非常好的cocos2d-x开发学习教程(非常好的成语)

  • 税务会计的工作内容和心得
  • 两处以上取得工资如何交社保
  • 对公账户转账给法人用途写什么
  • 代开专票可以开13个点吗
  • 现金清查时,发现长款200元,未查明原因,经批准后转销
  • 收购农产品进项税抵扣税率是多少
  • 固定资产加速折旧税收优惠政策
  • 短期借款的账务处理实训
  • 接受捐赠计入什么费用
  • 资产减值准备的税务处理
  • 存货盘盈涉税问题
  • 电子发票和纸质发票额度算在一起吗
  • 电子商务支付平台有哪些
  • 应付职工薪酬包括个税吗
  • 研发加计扣除税率
  • 费用退回现金如何入账
  • 快递增值税税率
  • 开了红字发票印花税怎么处理?
  • 小规模纳税人税收优惠政策变化
  • 低值易耗品进项税额转出账务处理
  • 个人名下车辆过户
  • 公司经营情况说明怎么写模板
  • 母公司向子公司收取管理费
  • 生产企业原材料的订购与运输建模
  • 应收账款增加记哪一方
  • 银行端现金缴税凭证
  • 税收筹划节税基金有哪些
  • 旧货销售的增值税税率
  • 华为鸿蒙os2.0发布
  • win10锁屏壁纸模糊怎么回事
  • php开发的优点与不足
  • 增值税一般纳税人资格登记表
  • Linux系统中sort排序命令的使用教程
  • 银行对公中收
  • 月入2万的10个小生意低成本
  • 员工离职后公司还用照片
  • 无形资产摊销会影响利润吗
  • 自有房子出租怎么做账
  • 潘塔纳尔湿地的主要成因
  • tepac接口
  • Glastonbury Tor, Somerset, England (© DEEPOL by plainpicture/Adam Burton)
  • 前端项目部署到nginx
  • rep p
  • 基于html的旅游网站设计源代码
  • vue路由详解
  • 税控盘费和服务费都可以减免吗
  • ca证书收费金额是多少?
  • 资产减值损失账户核算内容
  • 固定资产投资子公司
  • 医用口罩的适用人群
  • 行政事业单位职工工伤有哪些待遇
  • 工程服务费税率是多少2023
  • 建筑行业旧项目怎么处理
  • 行政单位要不要税号?
  • 行政事业单位应用方案总账,财务分析
  • 非货币性资产交换换入资产的入账价值
  • 应付职工薪酬中社保费怎么记账
  • 无偿划拨土地需要提折旧吗
  • 留底税额账上怎么体现
  • 一季度存款
  • 小企业会计准则和一般企业会计准则的区别
  • 自产货物赠送客户账务处理
  • 进项税税额是多少
  • 一般纳税人购进税控设备如何抵扣
  • 在建工程怎么记账
  • 存储过程sql server
  • Windows Server 2003几个实用小技巧
  • mac10.10.5无法升级
  • windows10如何多选文件
  • win10 edge浏览器崩溃
  • Extjs中DisplayField的日期或者数字格式化扩展
  • python3.7内置模块
  • ubuntu如何以root用户运行
  • 物理引擎演示
  • 向境外付款需要代扣代缴所得税吗
  • 中国税务精神内容英文
  • 出口运输费会计分录
  • 2020宜兴市民中心营业时间
  • 南昌高新税务局上班时间
  • 认缴股权是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设