人物移动的代码
#include "GameLayer.h"
#include "SimpleAudioEngine.h"
#pragma execution_character_set("utf-8")
using namespace CocosDenshion;
GameLayer::GameLayer()
{
}
GameLayer::~GameLayer()
{
}
bool GameLayer::init()
{
if (!Layer::init())
{
return false;
}
this->scheduleUpdate();
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCPoint center = ccp(winSize.width / 2, winSize.height / 2);
auto audio = SimpleAudioEngine::getInstance();
audio->playBackgroundMusic("background2.mp3", true);
auto bgSprite = Sprite::create("bg3.png");
bgSprite->setPosition(Vec2(winSize.width / 2, winSize.height /2));
this->addChild(bgSprite);
auto sprite = CCSprite::create("robot.png");
sprite->setPosition(Vec2(100, 200));
sprite->setTag(0);
addChild(sprite);
SpriteFrame* frame = nullptr;
Vector<SpriteFrame*> frameVec;
for (auto i = 1; i < 12; i++)
{
frame = SpriteFrame::create(StringUtils::format("sprite/%d.png", i), CCRectMake(0, 0, 123, 105));
frameVec.pushBack(frame);
}
Animation* animation = Animation::createWithSpriteFrames(frameVec);
animation->setLoops(-1);
animation->setDelayPerUnit(0.07f);
CCAnimate* animate = CCAnimate::create(animation);
sprite->runAction(animate);
auto floor = CCSprite::create("floor2.png");
floor->setPosition(Vec2(winSize.width/2,250));
auto up = CCMenuItemFont::create("↑", CC_CALLBACK_1(GameLayer::menuClickCallBack, this));
up->setPosition(Vec2(660, 140));
auto left = CCMenuItemFont::create("←", CC_CALLBACK_1(GameLayer::menuClickCallBack, this));
left->setPosition(Vec2(600, 100));
auto right = CCMenuItemFont::create("→", CC_CALLBACK_1(GameLayer::menuClickCallBack, this));
right->setPosition(Vec2(720, 100));
auto menu = CCMenu::create(up, left, right, NULL);
menu->setPosition(Point::ZERO);
addChild(menu);
up->setTag(1);
left->setTag(3);
right->setTag(4);
auto listener = EventListenerKeyboard::create();
listener->onKeyPressed = [=](EventKeyboard::KeyCode keyCode, Event* event) {
log("press");
keyMap[keyCode] = true;
if (keyCode == cocos2d::EventKeyboard::KeyCode::KEY_UP_ARROW)
{
auto jump = JumpTo::create(0.5, Vec2(sprite->getPositionX(), sprite->getPositionY()), 70, 1);
sprite->runAction(jump);
}
};
listener->onKeyReleased = [=](EventKeyboard::KeyCode keyCode, Event* event) {
log("release");
keyMap[keyCode] = false;
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
return true;
}
void GameLayer::menuClickCallBack(Ref * sender)
{
CCLOG("click menuitem");
Node* node = dynamic_cast<Node*>(sender);
int tag = node->getTag();
Node* sprite = this->getChildByTag(0);
if (NULL != node && NULL != sprite)
{
switch (tag)
{
case 1:
{
auto jump = JumpTo::create(0.5, Vec2(sprite->getPositionX(), sprite->getPositionY() ), 70, 1);
sprite->runAction(jump);
}
break;
case 3:
{
auto moveTo = MoveTo::create(0.2, Vec2(sprite->getPositionX() - 20.0f, sprite->getPositionY()));
sprite->runAction(moveTo);
}
break;
case 4:
{
auto moveTo = MoveTo::create(0.2, Vec2(sprite->getPositionX() + 20.0f, sprite->getPositionY()));
sprite->runAction(moveTo);
}
break;
default:
break;
}
}
}
void GameLayer::update(float delta)
{
auto left = cocos2d::EventKeyboard::KeyCode::KEY_LEFT_ARROW;
auto right = cocos2d::EventKeyboard::KeyCode::KEY_RIGHT_ARROW;
auto up = cocos2d::EventKeyboard::KeyCode::KEY_UP_ARROW;
int offsetX = 0;
if (keyMap[left])
{
offsetX = -4;
}
if (keyMap[right])
{
offsetX = 4;
}
if (offsetX == 0)
return;
Node* sprite = this->getChildByTag(0);
auto moveTo = MoveTo::create(0.2, Vec2(sprite->getPositionX() +offsetX, sprite->getPositionY()));
sprite->runAction(moveTo);
}
原本我想把整个项目传到github 但是包含cocos2d-x 引擎的东西 没有打包就没传
场景切换等 请查看我其他的文章 里面有写