cocos2d-x动作游戏的小技术点

    本文是在参考多人的博客文章后自己做练习的代码片段,如对原文感兴趣,可移步小满博客

1、地图根据玩家位置的移动而移动

void MapScene::update(float dt){
	//更改player的位置
	CCPoint playerPos = m_player->getPosition();
	playerPos.x += 1 * vmove;
	m_player->setPosition(playerPos);

	//根据player的位置动态移动map的位置
	CCTMXTiledMap* map = (CCTMXTiledMap*)this->getChildByTag(kTagTileMap);
	CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();

	int mapWidth = map->getMapSize().width * map->getTileSize().width;
	int mapHeight = map->getMapSize().height * map->getTileSize().height;

	float moveX = playerPos.x - visibleSize.width/2;
	float moveY = playerPos.y - visibleSize.height/2;

	//左右移动方向的控制
	if (moveX < 0)
	{
		moveX = 0;
	}
	if (moveX > mapWidth - visibleSize.width)
	{
		moveX = mapWidth - visibleSize.width;
	}
	//上下移动方向的控制
	if (moveY < 0)
	{
		moveY = 0;
	}
	if (moveY > mapHeight - visibleSize.height)
	{
		moveY = mapHeight - visibleSize.height;
	}

	map->setPosition(ccp(-moveX, -moveY));

}

(2)触摸效果

实现点击player的左边,player向左移动,点击右边向右移动,点击player停止移动。这里有一点需要注意,已在代码里标识。

bool MapScene::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent){

	CCPoint m_beginPos = pTouch->getLocationInView();
	m_beginPos = CCDirector::sharedDirector()->convertToGL(m_beginPos);

	CCPoint playerPos = m_player->getPosition();
	CCSize playerSize = m_player->getContentSize();
	/*
	在获得主角在屏幕中位置时要获得主角的绝对坐标,要加上地图的坐标,
	因为我们设置主角的位置时,是设置在地图上的,所以主角的位置是相对与地图坐标的
	*/
	CCTMXTiledMap* map = (CCTMXTiledMap*)this->getChildByTag(kTagTileMap);
	CCPoint mapPos = map->getPosition();

	if(m_beginPos.x < playerPos.x - playerSize.width/2 + mapPos.x){
		hmove = -1;
	}else if (m_beginPos.x > playerPos.x + playerSize.width/2 + mapPos.x){
		hmove = 1;
	}else{
		hmove = 0;
	}

	return true;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值