#include "MapScene.h"
#include "CCMutableDictionary.h"
#include "GamePlayer.h"
#include <math.h>
using namespace cocos2d;
enum
{
kTagTileMap = 1,
};
CCScene* MapScene::scene()
{
CCScene * scene = NULL;
do
{
// 'scene' is an autorelease object
scene = CCScene::node();
CC_BREAK_IF(! scene);
// 'layer' is an autorelease object
MapScene *layer = MapScene::node();
CC_BREAK_IF(! layer);
// add layer as a child to scene
scene->addChild(layer);
} while (0);
CCDirector::sharedDirector()->setDeviceOrientation(CCDeviceOrientationPortrait);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool MapScene::init()
{
player = new GamePlayer("player.png");
enemy = new GameEnemy("e6.png");
maplayer1 = CCSprite::spriteWithFile("back_img1.png");
maplayer2 = CCSprite::spriteWithFile("back_img1.png");
life1 = CCSprite::spriteWithFile("life.png");
life2 = CCSprite::spriteWithFile("life.png");
life3 = CCSprite::spriteWithFile("life.png");
life1->setPosition(ccp(20,20));
life2->setPosition(ccp(30,20));
life3->setPosition(ccp(40,20));
this->addChild(life1,1,300);
this->addChild(life2,1,301);
this->addChild(life3,1,302);
playerlife = 3;
CCSize size = CCDirector::sharedDirector()->getWinSize();
maplayer1->setAnchorPoint(ccp(0,0));
maplayer2->setAnchorPoint(ccp(0,0));
maplayer1->setPosition( ccp(0,0) );
maplayer2->setPosition( ccp(0,512) );
this->addChild(maplayer1, 0 ,1);
this->addChild(maplayer2, 0 ,2);
player->setPosition(ccp(122,30));
//enemy->setPosition(ccp(122,400));
this->addChild((player->getsprite()),2,0);
this->addChild((enemy->getsprite()), 2,100);
this->addChild((player->getstreak()),1);
m_emitter = new CCParticleSystemQuad();
m_emitter->setIsVisible(false);
this->addChild(m_emitter, 10);
setIsTouchEnabled(true);
scheduleUpdate();
stepindex = -1;
bullets = CCArray::arrayWithCapacity(10);
for(int i = 0;i < bullets->capacity();i ++){
GameBullet * mybullet = new GameBullet("bullet.png");
CCPoint herop = (player->getsprite())->getPosition();
CCSize herosize = (player->getsprite())->getContentSize();
mybullet->setPosition(ccp(herop.x,herop.y + herosize.height));
mybullet->setType(0);
(mybullet->getsprite())->setIsVisible(false);
this->addChild((mybullet->getsprite()), 200 + i);
bullets->addObject(mybullet);
}
bullets->retain();
enemybullets = CCArray::arrayWithCapacity(20);
for(int i = 0;i < enemybullets->capacity();i ++){
GameBullet * mybullet = new GameBullet("bullet3456.png");
(mybullet->getsprite())->setIsVisible(false);
mybullet->setType(1);
this->addChild((mybullet->getsprite()), 400 + i);
enemybullets->addObject(mybullet);
}
enemybullets->retain();
isreduce = false;
return true;
}
void MapScene::reduceLife()
{
(player->getsprite())->stopAllActions();
switch(playerlife){
case 3:
life1->setIsVisible(false);
playerlife --;
break;
case 2:
life2->setIsVisible(false);
playerlife --;
break;
case 1:
life3->setIsVisible(false);
playerlife --;
break;
}
CCActionInterval* action = CCBlink::actionWithDuration(5, 10);
(player->getsprite())->runAction(action);
schedule(schedule_selector(MapScene::resetreduce), 5.0f);
isreduce = true;
}
void MapScene::resetreduce(ccTime dt){
isreduce = false;
}
void MapScene::update(ccTime dt)
{
CCSize size = CCDirector::sharedDirector()->getWinSize();
CCPoint maplayer1p = maplayer1->getPosition();
CCPoint maplayer2p = maplayer2->getPosition();
maplayer1->setPosition(ccp(maplayer1p.x,maplayer1p.y - 5));
maplayer2->setPosition(ccp(maplayer2p.x,maplayer2p.y - 5));
if(maplayer2p.y < 0){
float temp = maplayer2p.y + 512;
maplayer1->setPosition(ccp(maplayer1p.x,temp));
}
if(maplayer1p.y < 0){
float temp = maplayer1p.y + 512;
maplayer2->setPosition(ccp(maplayer2p.x,temp));
}
if(!isreduce){
for(int i = 0;i < enemybullets->capacity();i ++){
GameBullet * mybullet = (GameBullet *)(enemybullets->objectAtIndex(i));
if((mybullet->getsprite())->getIsVisible() && player->iscollision(mybullet)){
(mybullet->getsprite())->setIsVisible(false);
reduceLife();
}
}
}
if(enemy->getState() != -1){
enemy->tick();
if(enemy->getBulletTick() == 59){
CCPoint herop = (enemy->getsprite())->getPosition();
CCSize herosize = (enemy->getsprite())->getContentSize();
for(int i = 0;i < enemybullets->capacity();i ++){
GameBullet * mybullet = (GameBullet *)(enemybullets->objectAtIndex(i));
if(! (mybullet->getsprite())->getIsVisible()){
mybullet->setPosition(ccp(herop.x,herop.y - herosize.height));
(mybullet->getsprite())->setIsVisible(true);
break;
}
}
}
if(!isreduce && enemy->iscollision(player)){
stepindex = 0;
enemy->setDead();
m_emitter->initWithFile("ExplodingRing.plist");
m_emitter->setIsVisible(true);
m_emitter->setPosition((enemy->getsprite())->getPosition());
reduceLife();
schedule(schedule_selector(MapScene::enemyrestart), 2.0f);
}else{
for(int i = 0;i < bullets->capacity();i ++){
GameBullet * mybullet = (GameBullet *)(bullets->objectAtIndex(i));
if((mybullet->getsprite())->getIsVisible() && enemy->collisionwithbullet(mybullet)){
enemy->setDead();
(mybullet->getsprite())->setIsVisible(false);
m_emitter->initWithFile("ExplodingRing.plist");
m_emitter->setIsVisible(true);
m_emitter->setPosition((enemy->getsprite())->getPosition());
schedule(schedule_selector(MapScene::enemyrestart), 2.0f);
}
}
}
}
for(int i = 0;i < bullets->capacity();i ++){
GameBullet * mybullet = (GameBullet *)(bullets->objectAtIndex(i));
if((mybullet->getsprite())->getIsVisible()){
mybullet->tick();
if((mybullet->getsprite())->getPosition().y > size.height){
(mybullet->getsprite())->setIsVisible(false);
}
}
}
for(int i = 0;i < enemybullets->capacity();i ++){
GameBullet * mybullet = (GameBullet *)(enemybullets->objectAtIndex(i));
if((mybullet->getsprite())->getIsVisible()){
mybullet->tick();
if((mybullet->getsprite())->getPosition().y < 0){
(mybullet->getsprite())->setIsVisible(false);
}
}
}
}
void MapScene::enemyrestart(ccTime dt)
{
enemy->restart();
unschedule(schedule_selector(MapScene::enemyrestart));
}
void MapScene::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)
{
CCSetIterator it = pTouches->begin();
CCTouch* touch = (CCTouch*)(*it);
CCPoint m_tBeginPos = touch->locationInView( touch->view() );
m_tBeginPos = CCDirector::sharedDirector()->convertToGL( m_tBeginPos );
CCPoint herop = (player->getsprite())->getPosition();
CCSize herosize = (player->getsprite())->getContentSize();
if(m_tBeginPos.x > herop.x - herosize.width/2 && m_tBeginPos.x < herop.x + herosize.width/2
&& m_tBeginPos.y > herop.y - herosize.height/2 && m_tBeginPos.y < herop.y + herosize.height/2){
stepindex = -5;
xdelta = m_tBeginPos.x - herop.x;
ydelta = m_tBeginPos.y - herop.y;
schedule(schedule_selector(MapScene::resettouch), 1.0f);
}
}
void MapScene::ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent)
{
CCSetIterator it = pTouches->begin();
CCTouch* touch = (CCTouch*)(*it);
CCPoint touchLocation = touch->locationInView( touch->view() );
touchLocation = CCDirector::sharedDirector()->convertToGL( touchLocation );
if(stepindex == -5){
CCPoint herop = (player->getsprite())->getPosition();
CCPoint lastone = ccp(herop.x + xdelta,herop.y + ydelta);
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
if(touchLocation.x >=
- 1
- 2
- 3
- 4
- 5
- 6
前往页