文件名称:cocos2dx 雷电MoonWarriors_游戏源码
文件大小:4.59MB
文件格式:7Z
更新时间:2021-10-10 09:46:11
游戏
cocos2dx 雷电MoonWarriors_游戏源码
#include "GameLayer.h"
#include "SimpleAudioEngine.h"
#include "Bullet.h"
#include "Resource.h"
#include "Config.h"
#include "Enemy.h"
#include "Effect.h"
#include "GameOver.h"
#include "PauseLayer.h"
using namespace cocos2d;
using namespace CocosDenshion;
bool isPaused = false;
GameLayer::GameLayer():m_state(statePlaying),m_time(0),m_ship(NULL),m_backSky(NULL),m_backSkyHeight(0),m_backSkyRe(NULL),m_backTileMap(NULL),m_backTileMapHeight(0),m_backTileMapRe(NULL),m_isBackSkyReload(false),m_isBackTileReload(false),m_lbScore(NULL),m_lifeCount(NULL),
m_tempScore(0)
{
}
GameLayer::~GameLayer()
{
if (m_levelManager) {
delete m_levelManager;
}
play_bullet->release();
enemy_bullet->release();
enemy_items->release();
}
bool GameLayer::init()
{
if (!CCLayer::init()) {
return false;
}
// 开启触摸
this->setTouchEnabled(true);
// 创建数组,需要retain一下
play_bullet = CCArray::create();
play_bullet->retain();
enemy_bullet = CCArray::create();
enemy_bullet->retain();
enemy_items = CCArray::create();
enemy_items->retain();
m_state = statePlaying;
Enemy::sharedEnemy();
Effect::sharedExplosion();
Config::sharedConfig()->resetConfig();
winSize = CCDirector::sharedDirector()->getWinSize();
m_levelManager = new LevelManager(this);
//初始化背景
initBackground();
m_screenRec = CCRectMake(0, 0, winSize.width, winSize.height + 10);
// score
m_lbScore = CCLabelBMFont::create("Score:0", s_arial14_fnt);
m_lbScore->setAnchorPoint(ccp(1, 0));
m_lbScore->setAlignment(kCCTextAlignmentRight);
addChild(m_lbScore, 1000);
m_lbScore->setPosition(winSize.width - 5, winSize.height - 30);
// ship life
CCTexture2D *shipTexture = CCTextureCache::sharedTextureCache()->addImage(s_ship01);
CCSprite *life = CCSprite::createWithTexture(shipTexture, CCRectMake(0, 0, 60, 38));
life->setScale(0.6);
life->setPosition(ccp(30,winSize.height-23));
addChild(life, 1, 5);
// ship life count
char lifecount[2];
sprintf(lifecount, "%d",Config::sharedConfig()->getLifeCount());
m_lifeCount = CCLabelTTF::create(lifecount, "Arial", 20);
m_lifeCount->setPosition(ccp(60, winSize.height-20));
m_lifeCount->setColor(ccc3(255,0, 0));
addChild(m_lifeCount, 1000);
// ship
m_ship = Ship::create();
addChild(m_ship, m_ship->getZoder(), 1001);
CCMenuItemImage *pause = CCMenuItemImage::create("pause.png", "pause.png", this, menu_selector(GameLayer::doPause));
pause->setAnchorPoint(ccp(1, 0));
pause->setPosition(ccp(winSize.width, 0));
CCMenu *menu = CCMenu::create(pause, NULL);
menu->setAnchorPoint(ccp(0, 0));
addChild(menu, 1, 10);
menu->setPosition(CCPointZero);
// 调 update函数
scheduleUpdate();
// 每秒调一次 scoreCounter函数
schedule(schedule_selector(GameLayer::scoreCounter), 1);
if (Config::sharedConfig()->getAudioState()) {
SimpleAudioEngine::sharedEngine()->playBackgroundMusic(s_bgMusic, true);
}
return true;
}
void GameLayer::update(float dt)
{
if (m_state == statePlaying) {
checkIsCollide();
removeInactiveUnit(dt);
checkIsReborn();
updateUI();
}
}
void GameLayer::scoreCounter()
{
if (m_state == statePlaying) {
m_time++;
m_levelManager->loadLevelResource(m_time);
}
}
void GameLayer::checkIsCollide()
{
CCObject *units;
CCObject *bullets;
CCObject *enemybs;
CCARRAY_FOREACH(enemy_items, units)
{
UnitSprite *enemy = dynamic_cast