喵星战争(四):触摸

 在上一节的onEnter中我们首先是初始化设置大小和允许触摸,然后是新建主干部分的精灵的创建和初始化。初始化之后,主角的移动和变化主要是通过捕获触摸点坐标的变化来实现。触摸点的逻辑处理函数主要集中在下面这三个函数中。

//开始触摸
bool GameObjHero::ccTouchBegan(CCTouch* touch ,CCEvent* event)
{
	//首先判断主角是否死亡
	if (((GameMain *)this->getParent())->isover)
		return false;

	//判断触摸点是否在主角的矩形框中
	if (!containsTouchLocation(touch))
	{
		return false;
	}
	else
	{
		//获得触摸偏移位置
		iscontrol = true;
		CCPoint touchPoint = touch->getLocationInView();
		touchPoint = CCDirector::sharedDirector()->convertToGL(touchPoint);
		offset.x = touchPoint.x - this->getPosition().x;
		offset.y = touchPoint.y - this->getPosition().y;
	}
	return true;
}

//触摸点移动
void GameObjHero::ccTouchMoved(CCTouch* touch ,CCEvent* event)
{
	if (iscontrol)
	{
		CCPoint touchPoint = touch->getLocationInView();
		touchPoint = CCDirector::sharedDirector()->convertToGL(touchPoint);

		//设置左右手上下操作
		float x = touchPoint.x - offset.x;
		float y = touchPoint.y - offset.y;
		if (x < this->getPosition().x)
		{
			lefthand->setFlipY(true);
			righthand->setFlipY(false);
		}
		else
		{
			lefthand->setFlipY(false);
			righthand->setFlipY(true);
		}
		this->setPosition(x , y);
	}
}


//触摸结束
void GameObjHero::ccTouchEnded(CCTouch* touch ,CCEvent* event)
{
	if (iscontrol)
	{
		iscontrol = false;
		lefthand->setFlipY(false);
		righthand->setFlipY(false);
	}
}

知识点:

1.getLocationInView():获取点在视图中的坐标(以左上角为原点);

cocos2d-x支持的几种坐标系:

1>屏幕坐标系 原点在左上角,X轴向右,Y轴向下。
2>GL坐标系 原点在左下角,X轴向右,Y轴向上。
3>世界坐标系 指相对于整个屏幕的坐标系,(0,0)就是屏幕的左下角,(320,480)就是屏幕的右上角。
4>本地坐标系 相对于父对象的坐标。

2.convertToGL():

由于cocos2d-x引擎使用的是open gl es进行渲染的,所以其默认是用的OpenGL坐标体系,所以该函数就是将屏幕坐标系改上的位置改为GL坐标系上的位置。

 3.CCFlipY:

这是一种即时动作(不需要时间或者需要时间0秒,马上就完成的动作),其效果是“垂直翻转”

其类似的还有:CCFlipX水平翻转,CCHide隐藏效果,CCShow显示效果等。

 在这里就是如果下个坐标点的位置大于目前坐标位置的横坐标,说明主角相对于目前的位置向右移动,则右手抬起,反之左手抬起。这个抬起的动作只需要将图片做一个y轴翻转,也就是y轴镜像。

 

ps:可能是由于教材中采用的cocos2d-x版本比较早所以其中一些函数已经发生更改,书中getLocationInView()原本是locationInView(),但他们两个的功能是一样的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值