cocos2d-x 实现场景切换人物移动

在这里插入图片描述

人物移动的代码

#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("action/APimg[%d].png",i), CCRectMake(0, 0, 123, 124));
		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));

	//addChild(floor);



	//创建菜单
	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);
	//menu->alignItemsVertically();

	//设置菜单tag
	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 引擎的东西 没有打包就没传

场景切换等 请查看我其他的文章 里面有写

发布了171 篇原创文章 · 获赞 386 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/weixin_42837024/article/details/103204794