最尴尬的一次面试。同学实习的公司刚刚创立了一个手游部,用的是cocos2d-x,正好是我想学的。马上叫同学推荐了下。可是对这个引擎的了解只是看了看书而已,并没有做任何东西试验过。面试的也出了道简单的题而已,就是创建地图及角色,然后可以移动角色,再加上动作。要对着例子可能没问题,但是就这么单问,脑袋就发懵。才发现自己准备是有多么不充分。
不说了,现在来解决下这个基本问题。
创建地图当然是用layer控件了,有一个实例化函数,一个初始化,更新,退出也就差不多够了。
//
// HMap.h
// cocos1
//
// Created by lj on 13-4-1.
//
//
#ifndef cocos1_HMap_h
#define cocos1_HMap_h
#include "cocos2d.h"
using namespace cocos2d;
class HMap : public cocos2d::CCLayer
{
public:
static HMap* createMap(const char * name);
private:
void mapInit(const char *name);//初始化
void updateMap();//更新函数
virtual void onExit();//退出函数
};
#endif
//
// HMap.cpp
// cocos1
//
// Created by lj on 13-4-1.
//
//
#include "HMap.h"
using namespace cocos2d;
HMap *HMap::createMap(const char *name)
{
HMap *map = new HMap();
if (map && map->create()) {
map->autorelease();
map->mapInit(name);
return map;
}
CC_SAFE_DELETE(map);
return NULL;
}
void HMap::mapInit(const char *name)
{
//创建地图
CCSprite *map = CCSprite::create(name);
//设置坐标
map->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width / 2,0));
this->addChild(map,0,1);
}
void HMap::updateMap()
{
}
void HMap::onExit()
{
}
//
// Player.h
// cocos1
//
// Created by lj on 13-4-2.
//
//
#ifndef cocos1_Player_h
#define cocos1_Player_h
#include "cocos2d.h"
#include <sstream>
using namespace cocos2d;
using namespace std;
//角色类
class Player : public cocos2d::CCSprite,public CCTouchDelegate
{
public:
//实例函数
static Player *createPlayer(const char *name);
private:
void pinit();
virtual void onEnter();
virtual void onExit();
virtual bool ccTouchBegan(CCTouch *touch,CCEvent *event);
virtual void ccTouchMoved(CCTouch *touch,CCEvent *event);
virtual void ccTouchEnded(CCTouch *touch,CCEvent *event);
};
#endif
//
// Player.cpp
// cocos1
//
// Created by lj on 13-4-2.
//
//
#include "Player.h"
using namespace cocos2d;
Player *Player::createPlayer(const char *name)
{
Player *player = new Player();
if (player && player->initWithFile(name)) {
player->autorelease();
player->init();
return player;
}
CC_SAFE_DELETE(player);
return NULL;
}
void Player::pinit(){
this->setPosition(ccp(0,0));
}
void Player::onEnter(){
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
CCSprite::onEnter();
}
void Player::onExit(){
CCDirector::sharedDirector()->getTouchDispatcher()->removeAllDelegates();
CCSprite::onExit();
}
bool Player::ccTouchBegan(CCTouch *touch, CCEvent *event)
{
this->setPosition(touch->getLocation());
return true;
}
void Player::ccTouchMoved(CCTouch *touch, CCEvent *event)
{
this->setPosition(touch->getLocation());
}
void Player::ccTouchEnded(CCTouch *touch, CCEvent *event)
{
this->setPosition(touch->getLocation());
}
touch方法里只要根据触点的位置去设置sprite的位置即可。
然后在init里创建即可
//地图
HMap * map = HMap::createMap("map.png");
addChild(map);
//角色
HPlayer * player=HPlayer::createPlayer("player.png");
addChild(player,0,tag_player);
但是结果,地图创建没问题,角色却出不来。而且用cocos2d,像main一样的入口函数是哪个呢??还是得多学习啊。