Cocos2d-x随记-精灵移动(续)

  接着之前的做了一些改动:1、由单个方向改为5个方向(静止0、右1、左2、上3、下4);

                                             2、第一次点击开启自动移动,之后的按钮点击改变方向;

                                             3、精灵移动不出窗口

废话不多说,上代码文件吧。

.h文件

#ifndef __SpriteMove_H__
#define __SpriteMove_H__

#include "cocos2d.h"

using namespace cocos2d;

class SpriteMove :
	public CCLayer
{
public:
	SpriteMove(void);
	~SpriteMove(void);
	CREATE_FUNC(SpriteMove);//autorelese构造方法
	bool init();//页面初始化方法

	CCSprite *m_pSprite;//俺把这个声明成全局的,方便后面该方向,嘿嘿。

	int m_iDirection;//表示方向的值1、2、3、4
	bool m_bIsClick;//判断是否开启自动更新

	void Click(CCObject *pSender);//按钮点击回调
	void DirectionChange(int m_iDirection);//改变方向的方法
	void update(float dt);//自动更新
};
#endif


.cpp文件

#include "SpriteMove.h"

//构造
SpriteMove::SpriteMove(void)
{
}
//析构
SpriteMove::~SpriteMove(void)
{
}
//页面初始化
bool SpriteMove::init()
{
	//首先是的加一个精灵,不然等下拿什么来移动呢- -!
	m_pSprite = CCSprite::create("CloseNormal.png");
	m_pSprite->setPosition(ccp(m_pSprite->getContentSize().width/2,m_pSprite->getContentSize().height/2));//定到左下角罚站去~~~
	addChild(m_pSprite);//为什么要加上去,就不说了吧- -

	//既然是通过按钮来控制精灵的移动,那肯定是的有一个按钮的撒~~~
	CCMenu *pMenu = CCMenu::create();//按钮要放到菜单里面才能起到按钮的作用的撒,所以……
	pMenu->setPosition(CCPointZero);//依旧还是给菜单定个位
	addChild(pMenu);//要把菜单加到层上吧,不然怎样知道有菜单呢,是吧~~~

	//创建一个按钮-----------没图片咯,那就来一堆关机按钮吧~~~
	CCMenuItemImage *pButton = CCMenuItemImage::create(//创建一个CCMenuItemImage按钮,又是create方法呢,autorelease哦,哈哈~~
		"CloseNormal.png",//通常情况下显示这个png,NormalImage咯
		"CloseSelected.png",//被点了就会变成这个png的,SelectedImage,嗯,很明显的单词啊。
		this,
		menu_selector(SpriteMove::Click));//回调方法
	pButton->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));//给按钮放到你想放倒的位子去,定位。(CCDirector::sharedDirector()->getWinSize():这个就是获取窗口大小的方法)
	pMenu->addChild(pButton);

	m_bIsClick = false;

	return true;
}
//按钮点击的回调
void SpriteMove::Click(CCObject *pSender)
{
	m_iDirection = rand()%5;

	if(m_bIsClick == false)
	{
		m_bIsClick = true;
		scheduleUpdate();
	}
	CCLOG("%d",m_iDirection);
}
//精灵移动方法
void SpriteMove::DirectionChange(int m_iDirection)
{
	CCSize WinSize = CCDirector::sharedDirector()->getWinSize();//获取窗口大小来判断精灵是否有移出窗口
	switch(m_iDirection)
	{
	case 1:
		if(m_pSprite->getPositionX()+m_pSprite->getContentSize().width<=WinSize.width-m_pSprite->getContentSize().width/2)//如果向右是可以走那就向右走
		{
			m_pSprite->setPosition(ccp(m_pSprite->getPositionX()+m_pSprite->getContentSize().width,m_pSprite->getPositionY()));//向右移动
		}
		break;
	case 2:
		if (m_pSprite->getPositionX()-m_pSprite->getContentSize().width>0)//判断能不能向左移动
		{
			m_pSprite->setPosition(ccp(m_pSprite->getPositionX()-m_pSprite->getContentSize().width,m_pSprite->getPositionY()));//向左移动
		}
		break;
	case 3:
		if(m_pSprite->getPositionY()+m_pSprite->getContentSize().height<=WinSize.height)//判断能不能向上移动
		{
			m_pSprite->setPosition(ccp(m_pSprite->getPositionX(),m_pSprite->getPositionY()+m_pSprite->getContentSize().height/2));//向上移动
		}
		break;
	case 4:
		if(m_pSprite->getPositionY()-m_pSprite->getContentSize().height>0)//最后一个方向--向下移动
		{
			m_pSprite->setPosition(ccp(m_pSprite->getPositionX(),m_pSprite->getPositionY()-m_pSprite->getContentSize().height));//向下移动
		}
		break;
	default:
		break;
	}	
}
//自动更新
void SpriteMove::update(float dt)
{
	DirectionChange(m_iDirection);
}

//------------------------------------------------------------------------------------------用随机数来取方向,随机数是大致写了一下--------------------------------------------------------------------------------//

//------------------------------------------------------------------------------------以上代码均是个人理解,如有错误,欢迎指正,谢谢!----------------------------------------------------------------------//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值