#include "menu.h"
#include "CCDirector.h"
#include "cocoa\CCObject.h"
#include <string>
#include <sstream>
#include <stdlib.h>
#include "GameOverScene.h"
using namespace cocos2d;
using namespace CocosDenshion;
MyMnue::MyMnue():_targets(NULL),_projectiles(NULL){
//杀敌数
_projectilesDestroyed=0;
}
//返回一个场景
CCScene* MyMnue::scene(){
CCScene* cs=NULL;
cs=CCScene::create();//新版本的coco许多类都用create来初始化。其实就是返回一个对象。并调用它的init()方法。并自动回收
MyMnue *mm=MyMnue::create();
//添加layer
cs->addChild(mm);
return cs;
}
//初始化layer
bool MyMnue::init(){
bool bRet=false;
do{
//初始化数组-数组保存子弹和怪物
_targets=new CCArray();
_projectiles=new CCArray();
//播放背景音乐
//预先加载背景音乐和音效
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("217.ogg");
SimpleAudioEngine::sharedEngine()->preloadEffect("002.ogg");
//开始播放
SimpleAudioEngine::sharedEngine()->playBackgroundMusic("217.ogg",true);
//CC_BREAK_IF就是假如父类没有初始化成功就退出
CC_BREAK_IF(!CCLayerColor::initWithColor(ccc4(255,255,255,255)));
//关闭按钮
CCMenuItemImage* pCloseItem=CCMenuItemImage::create(
"CloseNormal.png",//正常是的图片
"CloseSelected.png",//点击后的图片
this,
menu_selector(MyMnue::menuCloseCallback)//绑定点击事件
);
CC_BREAK_IF(! pCloseItem);
//按钮定位
pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));
//按钮要加到Menu上的
CCMenu* pMenu=CCMenu::create(pCloseItem,NULL);
//CCPointZero表示原点0,0
pMenu->setPosition(CCPointZero);
CC_BREAK_IF(!pMenu);
//这里的1代表显示优先级。优先级为2的图片会盖在1上
addChild(pMenu,1);
//主角图片 CCREectMake是画矩形。用来切割图片。
CCSprite *player = CCSprite::create("017.png",
CCRectMake(0, 0, 63, 83) );
//得到屏幕大小
CCSize pSize=CCDirector::sharedDirector()->getWinSize();
player->setPosition(ccp(player->getContentSize().width/2,pSize.height/2));
addChild(player);
//开启触屏
this->setTouchEnabled(true);
//开启update方法 不断刷新屏幕
this->scheduleUpdate();
}while(0);
//定时器 每1.0秒调用一次gameLogic方法
this->schedule( schedule_selector(MyMnue::gameLogic), 1.0 );
return true;
}
//按钮关闭方法
void MyMnue::menuCloseCallback(CCObject * pSender){
CCDirector::sharedDirector()->end();
}
//生成怪物
void MyMnue::addTarget(){
//怪物图片
CCSprite* target=CCSprite::create("104.png",
CCRectMake(190, 0, 55, 60));
//----------这一坨代码是为了从右边随机高度出现怪物
int minY = target->getContentSize().height/2;
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
int maxY = winSize.height- target->getContentSize().height/2;
int rangeY = maxY - minY;
int actualY = ( rand() % rangeY ) + minY;
target->setPosition( ccp(winSize.width - (target->getContentSize().width/2), actualY) );
//------------
//加入数组
target->setTag(1);
_targets->addObject(target);
this->addChild(target);
//确定随机时间
int minDuration = (int)2.0;
int maxDuration = (int)4.0;
int rangeDuration = maxDuration - minDuration;
int actualDuration = ( rand() % rangeDuration )+minDuration;
//创建动作。移动动作
CCFiniteTimeAction* actionMove=CCMoveTo::create(actualDuration,
ccp(0-target->getContentSize().width/2,actualY));
//创建回调动作
CCFiniteTimeAction* actionMoveDone=CCCallFuncN::create(this,callfuncN_selector(MyMnue::spriteMoveFinished));
//怪物运行动作
target->runAction(CCSequence::create(actionMove,actionMoveDone,NULL));
}
//怪物走到左边时触发
void MyMnue::spriteMoveFinished(CCNode* sender){
//获得在左边消失的怪物对象
CCSprite* sprite=(CCSprite*)sender;
this->removeChild(sprite,true);
//判断是怪物
if(sprite->getTag()==1){
_targets->removeObject(sprite);
//创建scene
GameOverScene *gameOverScene =GameOverScene::create();
gameOverScene->getLayer()->getLabel()->setString("You Lose :[");
//跳转scene
CCDirector::sharedDirector()->replaceScene(gameOverScene);
}
else if(sprite->getTag()==2){//判断是子弹
_projectiles->removeObject(sprite);
}
}
void MyMnue::gameLogic(float ct){
this->addTarget();
}
void MyMnue::ccTouchEnded(CCTouch* pTouch,CCEvent* pEvent){
CCPoint local=pTouch->getLocation();
//转换坐标
//local=CCDirector::sharedDirector()->convertToGL(local);
//音效
SimpleAudioEngine::sharedEngine()->playEffect("002.ogg");
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//创建飞镖
CCSprite *projectile = CCSprite::create("017.png",
CCRectMake(251, 122, 28, 15));
projectile->setPosition( ccp(20, winSize.height/2) );
//加入数组
projectile->setTag(2);
_projectiles->addObject(projectile);
int offX = local.x - projectile->getPosition().x;
//计算怪物消失坐标和速度
int offY = local.y - projectile->getPosition().y;
if (offX <= 0) return;
this->addChild(projectile);
int realX = winSize.width+ (projectile->getContentSize().width/2);
float ratio = (float)offY / (float)offX;
int realY = (realX * ratio) + projectile->getPosition().y;
CCPoint realDest = ccp(realX, realY);
int offRealX = realX - projectile->getPosition().x;
int offRealY = realY - projectile->getPosition().y;
float length = sqrtf((offRealX * offRealX)+ (offRealY*offRealY));
float velocity = 480/1;
//
float realMoveDuration = length/velocity;
projectile->runAction( CCSequence::create(
CCMoveTo::create(realMoveDuration, realDest),
CCCallFuncN::create(this,
callfuncN_selector(MyMnue::spriteMoveFinished)),
NULL) );
}
bool MyMnue::ccTouchBegan(CCTouch* pTouch,CCEvent* pEvent){
return true;
}
void MyMnue::ccTouchMoved(CCTouch* pTouch,CCEvent* pEvent){}
void MyMnue::registerWithTouchDispatcher()
{
/* 注册触屏事件 */
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
}
MyMnue::~MyMnue(){
if(_targets){
_targets->release();//凡是通过new出来的对象都要release 、create出来的就不用了
_targets=NULL;
}
if(_projectiles){
_projectiles->release();
_projectiles=NULL;
}
}
//刷屏函数
void MyMnue::update(float delta){
CCArray* projectilesToDelete=new CCArray();
CCArray* targetsToDelete=new CCArray();
CCObject* objpro=NULL;
CCObject* objtar=NULL;
CCARRAY_FOREACH(_projectiles,objpro){
CCSprite *projectile =(CCSprite*)objpro;
CCRect projectileRect = CCRectMake(
projectile->getPosition().x - (projectile->getContentSize().width/2),
projectile->getPosition().y - (projectile->getContentSize().height/2),
projectile->getContentSize().width,projectile->getContentSize().height);
CCARRAY_FOREACH(_targets,objtar){
CCSprite* target=(CCSprite*)objtar;
CCRect targetRect = CCRectMake(
target->getPosition().x - (target->getContentSize().width/2),
target->getPosition().y -(target->getContentSize().height/2),
target->getContentSize().width,
target->getContentSize().height);
if(projectileRect.intersectsRect(targetRect)){
this->removeChild(target);
this->removeChild(projectile);
_projectiles->removeObject(projectile);
_targets->removeObject(target);
_projectilesDestroyed++;
if (_projectilesDestroyed > 30)
{
GameOverScene *gameOverScene =GameOverScene::create();
gameOverScene->getLayer()->getLabel()->setString("You Win!");
CCDirector::sharedDirector()->replaceScene(gameOverScene);
}
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
新版SimpleGame(cocos2d-x2.1.4)
共79个文件
tlog:38个
h:6个
png:6个
5星 · 超过95%的资源 需积分: 10 235 下载量 58 浏览量
2013-07-02
12:52:25
上传
评论 1
收藏 5.83MB ZIP 举报
温馨提示
使用cocos2d-x 2.1.4 重新完成的官方小示例。注释齐全。欢迎大家下载。
资源推荐
资源详情
资源评论
收起资源包目录
newSimpleGame.zip (79个子文件)
test2
proj.win32
resource.h 490B
test2.win32.vcxproj 8KB
GameOverScene.h 675B
test2.aps 49KB
GameOverScene.cpp 1KB
res
test2.ico 47KB
main.cpp 863B
test2.rc 2KB
menu.h 742B
test2.win32.vcxproj.user 763B
test2.win32.vcxproj.filters 2KB
Debug.win32
test2.win32.log 4KB
cl.command.1.tlog 11KB
test2.win32.exe.intermediate.manifest 381B
link.8756-cvtres.read.1.tlog 2B
link.8756.write.1.tlog 2B
link.7440-cvtres.write.1.tlog 2B
rc.command.1.tlog 1KB
CL.read.1.tlog 241KB
vc100.idb 1.46MB
mt.read.1.tlog 506B
link.7440.write.1.tlog 2B
link.7596.write.1.tlog 2B
test2.res 47KB
link.980-cvtres.read.1.tlog 2B
link.980.write.1.tlog 2B
link.8756.read.1.tlog 2B
link-cvtres.read.1.tlog 2B
link.read.1.tlog 6KB
link.8096-cvtres.write.1.tlog 2B
rc.read.1.tlog 3KB
link.write.1.tlog 2KB
CL.write.1.tlog 7KB
link.7440-cvtres.read.1.tlog 2B
test2.win32.Build.CppClean.log 3KB
menu.obj 157KB
test2.win32.lastbuildstate 88B
link.11560-cvtres.read.1.tlog 2B
vc100.pdb 748KB
link.7596-cvtres.read.1.tlog 2B
link.11560-cvtres.write.1.tlog 2B
link.7440.read.1.tlog 2B
main.obj 80KB
link.command.1.tlog 3KB
link.7596.read.1.tlog 2B
link.980-cvtres.write.1.tlog 2B
test2.win32.exe.embed.manifest 406B
mt.write.1.tlog 506B
link.8096.write.1.tlog 2B
HelloWorldScene.obj 118KB
link.11560.write.1.tlog 2B
test2.win32_manifest.rc 224B
link.7596-cvtres.write.1.tlog 2B
link.980.read.1.tlog 2B
link.8756-cvtres.write.1.tlog 2B
link.8096.read.1.tlog 2B
link.11560.read.1.tlog 2B
test2.win32.exe.embed.manifest.res 472B
mt.command.1.tlog 518B
rc.write.1.tlog 866B
GameOverScene.obj 133KB
AppDelegate.obj 101KB
link-cvtres.write.1.tlog 2B
link.8096-cvtres.read.1.tlog 2B
main.h 270B
menu.cpp 7KB
Classes
AppDelegate.cpp 1KB
HelloWorldScene.h 631B
HelloWorldScene.cpp 3KB
AppDelegate.h 960B
Resources
fukua.MP3 4.41MB
HelloWorld.png 142KB
104.png 15KB
CloseNormal.png 6KB
017.png 28KB
217.ogg 543KB
012.png 69KB
002.ogg 14KB
CloseSelected.png 5KB
共 79 条
- 1
蓝胖子学编程
- 粉丝: 19
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页