#include "GameBaseScene.h"
int GameBaseScene::tiledColsCount;
int GameBaseScene::tiledRowsCount;
bool** GameBaseScene::canPassGrid;
Vector<RicherPlayer*> GameBaseScene::players_vector;
Vector<Sprite*> GameBaseScene::pathMarkVector;
Scene* GameBaseScene::createScene()
{
auto scene = Scene::create();
auto layer = GameBaseScene::create();
scene->addChild(layer);
return scene;
}
bool GameBaseScene::init()
{
if ( !Layer::init() )
{
return false;
}
addMap();
initTiledGrid();
setWayPassToGrid();
addRightBanner();
drawTable(2);
addPathMark();
addPlayer();
addGoButton();
addNotificationObserver();
addDice();
return true;
}
void GameBaseScene::addPathMark()
{
Sprite* mark1 = Sprite::create(PATH_MARK_1);
Sprite* mark2 = Sprite::create(PATH_MARK_2);
Sprite* mark3 = Sprite::create(PATH_MARK_3);
Sprite* mark4 = Sprite::create(PATH_MARK_4);
Sprite* mark5 = Sprite::create(PATH_MARK_5);
Sprite* mark6 = Sprite::create(PATH_MARK_6);
mark1->setAnchorPoint(ccp(0,0));
mark2->setAnchorPoint(ccp(0,0));
mark3->setAnchorPoint(ccp(0,0));
mark4->setAnchorPoint(ccp(0,0));
mark5->setAnchorPoint(ccp(0,0));
mark6->setAnchorPoint(ccp(0,0));
mark1->setVisible(false);
mark2->setVisible(false);
mark3->setVisible(false);
mark4->setVisible(false);
mark5->setVisible(false);
mark6->setVisible(false);
addChild(mark1);
addChild(mark2);
addChild(mark3);
addChild(mark4);
addChild(mark5);
addChild(mark6);
pathMarkVector.pushBack(mark1);
pathMarkVector.pushBack(mark2);
pathMarkVector.pushBack(mark3);
pathMarkVector.pushBack(mark4);
pathMarkVector.pushBack(mark5);
pathMarkVector.pushBack(mark6);
}
void GameBaseScene::drawPathColor(std::vector<int> rowVector,std::vector<int> colVector)
{
int stepsCount = rowVector.size()-1;
for(int i=1;i<rowVector.size();i++)
{
pathMarkVector.at(i-1)->setPosition(ccp(colVector[i]*32,rowVector[i]*32));
pathMarkVector.at(i-1)->setVisible(true);
}
}
void GameBaseScene::addDice()
{
diceFrameCache= SpriteFrameCache::getInstance();
diceFrameCache->addSpriteFramesWithFile("map/dice.plist","map/dice.png");
Vector<SpriteFrame*> diceVector ;
char name[20];
memset(name, 0, 20);
for (int i=1; i<=6; i++)
{
sprintf(name, "dice_%02d.png",i);
diceVector.pushBack(diceFrameCache->getSpriteFrameByName(name));
}
if(!AnimationCache::getInstance()->getAnimation("dice_animation"))
{
AnimationCache::getInstance()->addAnimation(Animation::createWithSpriteFrames(diceVector,0.1),"dice_animation");
}
dice_animate = Animate::create(AnimationCache::getInstance()->getAnimation("dice_animation"));
dice_animate->retain();
diceSprite =Sprite::createWithSpriteFrame(diceFrameCache->getSpriteFrameByName("dice_01.png"));
diceSprite->setPosition(ccp(tableStartPosition_x+2*tableWidth,tableStartPosition_y-tableHeight*4.5));
addChild(diceSprite);
diceSprite->runAction(RepeatForever::create(dice_animate));
}
void GameBaseScene::addNotificationObserver()
{
NotificationCenter::getInstance()->addObserver(
this,
callfuncO_selector(GameBaseScene::receivedMsgForGo),
MSG_GO,
NULL);
}
void GameBaseScene::receivedMsgForGo(Object* data)
{
int retMsgType =((String*)data)->intValue();
Vector<Node*> vecMenuItem = getMenu()->getChildren();
Size winSize = Director::getInstance()->getWinSize();
if(retMsgType ==1)
{
for(auto it=vecMenuItem.begin();it!=vecMenuItem.end();it++)
{
Node* node = dynamic_cast<Node*>(*it);
MoveBy* moveBy = MoveBy::create(0.3,ccp(-(node->getContentSize().width)*2,0));
node->runAction(moveBy);
}
diceSprite->resume();
}else
{
for(auto it=vecMenuItem.begin();it!=vecMenuItem.end();it++)
{
Node* node = dynamic_cast<Node*>(*it);
MoveBy* moveBy = MoveBy::create(0.3,ccp((node->getContentSize().width)*2,0));
//RotateBy* rotateBy =RotateBy::create(1,360,10);
//Action* action =Spawn::create(moveBy,rotateBy,NULL);
node->runAction(moveBy);
}
char temp[20];
memset(temp, 0, 20);
sprintf(temp, "dice_%02d.png",randNumber);
diceSprite->setSpriteFrame(diceFrameCache->getSpriteFrameByName(temp));
diceSprite->pause();
}
log("received go message is: %d",retMsgType);
}
void GameBaseScene::setWayPassToGrid()
{
TMXLayer* wayLayer = _map->layerNamed("way");
Size _mapSize = wayLayer->getLayerSize();
for (int j = 0; j < _mapSize.width; j++) {
for (int i = 0; i < _mapSize.height; i++) {
Sprite* _sp = wayLayer->tileAt(Point(j, i));
if (_sp)
{
float x = _sp->getPositionX();
float y = _sp->getPositionY();
int col = x/tiledWidth;
int row = y/tiledHeight;
canPassGrid[row][col] = true;
Vec2 p = _sp->getPosition();
wayLayerPass_vector.push_back(p);
log("canPassGrid row= %d ,col =%d ,canpass = %d" ,row,col,canPassGrid[row][col]);
}
}
}
log("setWayPassToGrid finished");
}
void GameBaseScene::addGoButton()
{
Menu* menu = Menu::create();
menu->setPosition(CCPointZero);
setMenu(menu);
MenuItemImage* goMenuItemButton = MenuItemImage::create("map/go_normal.png", "map/go_press.png", this, menu_selector(GameBaseScene::goButtonCallback));
goMenuItemButton->setPosition(ccp(tableStartPosition_x+2*tableWidth,tableStartPosition_y-tableHeight*6));
menu->addChild(goMenuItemButton);
addChild(menu);
}
void GameBaseScene::goButtonCallback(cocos2d::CCObject *pSender)
{
log("go button clicked");
randNumber = rand()%6 + 1;
RouteNavigation::getInstance()->getPath(player1,randNumber,canPassGrid,tiledRowsCount,tiledColsCount);
std::vector<int> colVector = RouteNavigation::getInstance()->getPathCols_vector();
std::vector<int> rowVector = RouteNavigation::getInstance()->getPathRow_vector();
for(int i=0;i<rowVector.size();i++)
{
log(" rowVector row is %d --- colVector col is %d",rowVector[i],colVector[i]);
}
NotificationCenter::getInstance()->postNotification(MSG_GO,String::create("0"));
player1->startGo(rowVector,colVector);
log("go button clicked over");
}
void GameBaseScene::addRightBanner()
{
Sprite* rightBanner = Sprite::create(RIGHT_BANNER);
rightBanner->setAnchorPoint(ccp(0,0));
rightBanner->setPosition( ccp(tableStartPosition_x-10, 0));
addChild(rightBanner);
}
void GameBaseScene:: addPlayer()
{
addPlayerInfo();
struct timeval now;
gettimeofday(&now, NULL);
unsigned rand_seed = (unsigned)(now.tv_sec*1000 + now.tv_usec/1000); //都转化为毫秒
srand(rand_seed);
player1 = RicherPlayer::create(PLAYER_1_NAME,PLAYER_1_TAG,false);
int _rand1 = rand()%(wayLayerPass_vector.size());
log("rand %d" ,_rand1);
Vec2 vec2ForPlayer1 = wayLayerPass_vector.at(_rand1);
vec2ForPlayer1.y +=tiledHeight;
player1->setPosition(vec2ForPlayer1);
player1->setAnchorPoint(ccp(0,0.5));
int col = vec2ForPlayer1.x/tiledWidth;
int row = vec2ForPlayer1.y/tiledHeight;
log("player1 position row= %d ,col = %d" ,row,col);
log("player1 position x= %f ,y = %f" , vec2ForPlayer1.x, vec2ForPlayer1.y);
char money1[20];
memset(money1, 0, 20);
sprintf(money1, "$ %d",player1->getMoney());
getPlayer1_money_label()->setString(money1);
char strength1[20];
memset(strength1, 0, 20);
sprintf(strength1, "+ %d",player1->getStrength());
getPlayer1_strength_label()->setString(strength1);
addChild(player1);
players_vector.pushBack(player1);
player2 = RicherPlayer::create(PLAYER_2_NAME,PLAYER_2_TAG,true);
int _rand2 = rand()%(wayLayerPass_vector.size());
log("rand %d" ,_rand2);
Vec2 vec2ForPlayer2 = wayLayerPass_vector.at(_rand2);
vec2ForPlayer2.y +=tiledHeight;
player2->setPosition(vec2ForPlayer2);
player2->setAnchorPoint(ccp(0,0.5));
int col2 = vec2ForPlayer2.x/tiledWidth;
int row2 = vec2ForPlayer2.y/tiledHeight;
log("player1 position row= %d ,col =
Cocos2d-x 3.2 大富翁游戏项目开发-第十一部分 提升角色行走体验
需积分: 10 54 浏览量
2014-12-27
00:39:50
上传
评论 2
收藏 2.12MB RAR 举报
lideguo1979
- 粉丝: 148
- 资源: 77
最新资源
- Picasso_v3.1 2.ipa
- chromedriver-mac-arm64.zip
- 蓝zapro.apk
- chromedriver-linux64.zip
- UCAS研一深度学习实验-MNIST手写数字识别python源码+详细注释(高分项目)
- 基于Python和PyTorch框架完成的一个手写数字识别实验源码(带MINIST手写数字数据集)+详细注释(高分项目)
- 基于Matlab在MNIST数据集上利用CNN完成手写体数字识别任务,并实现单层CNN反向传播算法+源代码+文档说明(高分项目)
- NVIDIA驱动、CUDA和Pytorch及其依赖
- 基于SVM多特征融合的微表情识别python源码+项目说明+详细注释(高分课程设计)
- html动态爱心代码一(附源码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈