#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#define WIDTH 12
#define HEIGHT 9
#include "cocos2d.h"
USING_NS_CC;
class GameScene : public cocos2d::Layer
{
public:
cocos2d::Vec2 temp;
cocos2d::TMXLayer* recLayer;
cocos2d::Sprite*cardSprite[WIDTH][HEIGHT];
int card[WIDTH][HEIGHT];
typedef tagSIZE GameScene::SIZE;
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::Scene* createScene();
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
void GameScene::initBoard();
// implement the "static create()" method manually
CREATE_FUNC(GameScene);
};
#endif // __HELLOWORLD_SCENE_H__
#include "MyScene.h"
#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h"
#include "CardSprite.h"
USING_NS_CC;
using namespace cocostudio::timeline;
Scene* GameScene::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = GameScene::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 GameScene::init()
{
if (!Layer::init())
{
return false;
}
temp = Vec2(-1, -1);
auto* recMap = TMXTiledMap::create("rec.tmx");
recMap->setAnchorPoint(Vec2(0, 0));
recMap->setPosition(Vec2(0, 0));
addChild(recMap);
recLayer = recMap->layerNamed("Layer1");
auto*background = LayerColor::create(Color4B(255, 255, 255, 255));
addChild(background);//向场景中加入方块
initBoard();
return true;
}
void GameScene::initBoard()
{
for (int i = 0; i < WIDTH; i++)
{
for (int j = 0; j < HEIGHT; j++)
{
int id = recLayer->tileGIDAt(Vec2(i, j));
if (id == 2)
{
//绿色图块的id为2,说明可以放东西
card[i][j] = rand() % 5 + 1;//随机生成个资源索引
}
else
{
card[i][j] = 0;
}
cardSprite[i][j] = Sprite::create(String::createWithFormat("card%d.png", card[i][j])->getCString());
cardSprite[i][j]->setPosition(Vec2(20 + 40 * i, 20 + 40 * j));//设置方块的位置
addChild(cardSprite[i][j]);
}
}
int k = 0;
int t_card[WIDTH*HEIGHT] = { 0 };
//先获取地图中有多少格子是绿色的
for (int x = 0; x < WIDTH; x++)
{
for (int y = 0; y < HEIGHT; y++)
{
//先获取地图上某个图块的id值
int id = recLayer->tileGIDAt(Vec2(x, y));
if (id == 2)
{
//如果id=2说明图块为绿色,可以使用。则计数器k+1
k++;
}
}
}
//对t_card中值取随机数
srand(unsigned(time(NULL)));
for (int i = 0; i < k / 2; i++)
{
t_card[i] = rand() % 5 + 1;
t_card[i + k / 2] = t_card[i];
}
//将t_card数组中的顺序打乱
for (int i = 0; i < k; i++)
{
int t_k = rand() % k;
int t = t_card[i];
t_card[i] = t_card[t_k];
t_card[t_k] = t;
}
k = 0;
//根据数组t_card和地图中的内容开始生产方块并显示
for (int x = 0; x < WIDTH; x++)
{
for (int y = 0; y < HEIGHT; y++)
{
//获取地图中某个图块的id值
int id = recLayer->tileGIDAt(Vec2(x, y));
if (id == 2)
{
CCLOG("%d", t_card[k]);
//如果id=2说明图块为绿色,可以使用。则创建有效方块
card[x][y] = CardSprite::createCardSprite(t_card[k], x, y);
addChild(card[x][y]);
k++;
}
else
{
//否则生成无效方块
card[x][y] = CardSprite::createCardSprite(0, x, y);
addChild(card[x][y]);
}
}
}
}
//bool GameScene::onTouchBegan(Touch *touch, Event *event)
//{
// //x,y 获取了用户单击在哪个方块上
// Point point = touch->getLocation();
// int x = (int)point.x / SIZE;
// int y = (int)point.y / SIZE;
// if (x < WIDTH&&y < HEIGHT)
// {
// if (card[x][y]->type != 0)
// {
// int x1 = (int)temp.x;
// int y1 = (int)temp.y;
// if (x1 != -1 && y1 != -1)
// {
// //判断此次单击的方块与上次单击的方块是否类型相同
// if (card[x][y]->type == card[x1][y1]->type)
// {
// //如果相同则全部消去
// card[x][y]->cardDelete();
// card[x][y]->cardDelete();
// //temp恢复
// temp = Vec2(-1, -1);
// }
// else
// {
// card[x1][y1]->setOpacity(255);
// temp = Vec2(-1, -1);
// }
// }
// else
// {
// //如果temp中没有记录
// temp = Vec2(x, y);
// card[x1][y1]->setOpacity(180);
// }
// }
// }
// return false;
//}
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
USING_NS_CC;
class CardSprite : public cocos2d::Layer
{
public:
int type;
cocos2d::Sprite* card;
void cardDelete();
static CardSprite*createCardSprite(int type, float x, float y);//方块初始化
void cardInit(int type, float x, float y);
virtual bool init();
CREATE_FUNC(CardSprite);
};
#endif // __HELLOWORLD_SCENE_H__
#include "CardSprite.h"
#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h"
#include "CardSprite.h"
USING_NS_CC;
using namespace cocostudio::timeline;
CardSprite* CardSprite::createCardSprite(int type, float x, float y)
{
//该方法为套用模板
CardSprite* card = new CardSprite();
if (card&&card->init())
{
card->autorelease();
card->cardInit(type, x, y);
return card;
}
CC_SAFE_DELETE(card);
return NULL;
}
bool CardSprite::init()
{
//套用模板
if (!Layer::init())
{
return false;
}
return true;
}
void CardSprite::cardInit(int type, float x, float y)
{
this->type = type;//定义方块种类
card = Sprite::create(String::createWithFormat("card%d.png", type)->getCString());//创建精灵
card->setPosition(20 + 40 * x, 20 + 40 * y);//设置方块位置
addChild(card);//将方块加入到场景中
}
void CardSprite::cardDelete()
{
this->type = 0;//消去方块,则type属性为0
//设置frame用于显示
auto texture = Director::getInstance()->getTextureCache()->addImage("sprite1.png");
auto frame = SpriteFrame::create("card0.png", Rect(0, 0, 40, 40));
card->setDisplayFrame(frame);
}
错误 7 error C2653: “CardSprite”: 不是类或命名空间名称 c:\users\administrator\desktop\mygame\classes\myscene.cpp 110 1 myGame
错误 8 error C3861: “createCardSprite”: 找不到标识符 c:\users\administrator\desktop\mygame\classes\myscene.cpp 110 1 myGame
错误 9 error C2664: “void cocos2d::Node::addChild(cocos2d::Node *,int,const std::string &)”: 无法将参数 1 从“int”转换为“cocos2d::Node *” c:\users\administrator\desktop\mygame\classes\myscene.cpp 111 1 myGame
错误 10 error C2653: “CardSprite”: 不是类或命名空间名称 c:\users\administrator\desktop\mygame\classes\myscene.cpp 117 1 myGame
错误 11 error C3861: “createCardSprite”: 找不到标识符 c:\users\administrator\desktop\mygame\classes\myscene.cpp 117 1 myGame
错误 12 error C2664: “void cocos2d::Node::addChild(cocos2d::Node *,int,const std::string &)”: 无法将参数 1 从“int”转换为“cocos2d::Node *” c:\users\administrator\desktop\mygame\classes\myscene.cpp 118 1 myGame
Cocos Studio :v3.10 VS2012
我看了别人的日志,尝试了无法解决,希望哪位大神能帮下忙。