Cocos2d-x MultipleTouch & CCControllButton'
来源:未知 责任编辑:责任编辑 发表时间:2013-12-18 11:33 点击:次
在cocos2dx的程序设计中有时候会遇到需要多点触摸的功能,下面先介绍一下在cocos2dx中多点触摸的一般规则,然后介绍我遇到的一个有关多点触摸的情景的解决方案。
p>
p>(一)使用多点触摸规则:
p>关于多点触摸在TestCPP中有一个例子展示,通过这个例子就可以知道多点触摸是如何使用的了。
p>简单说一下步骤:
p>①开启多点触摸
p>在ios文件夹中的AppController.mm文件的
p>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中:
p>[__glView setMultipleTouchEnabled:true];
p>
p>②注册触摸事件( StandardDelegate )
p>a)可以在onEnter方法中: CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);
p>b)也可以重写: virtual void registerWithTouchDispatcher(void); 在这个方法中:
p>CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);
p>而且注意要在init方法中: setTouchEnabled(true);
p>为什么呢?因为在init方法中,setTouchEnabled(true); 会自动回调 registerWithTouchDispatcher 方法。
p>
p>③触摸事件委托方法
p>[cpp]
p>virtual void ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);
p> virtual void ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);
p> virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);
p> virtual void ccTouchesCancelled(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);
p>
p>在每一个委托方法中,可以用下面的遍历方法,获取每一个触摸点的信息。
p>[cpp]
p>CCSetIterator iter = pTouches->begin();
p>
p> for (; iter != pTouches->end(); iter++)
p> {
p> CCTouch* pTouch = (CCTouch*)(*iter);
p> CCPoint location = pTouch->getLocation();
p>
p> }
p>
p>
p>(二)一个类似多点触摸情景解决方法
p>情景介绍:在layer中,需要按住某一个按键,然后在按键保持按下的时候,执行某一个事件(也是要触摸屏幕执行的),如果松开按键,那么执行这个事件结束。
p>A)那么我的第一个反应就是使用多点触摸,理论上是可以解决的,但是感觉判断起来有点繁琐,所有暂时放弃了这个解决方法。
p>B)我就想到要CCMenu item 或者 CCControllButton 这类的“按键” 实现,当按键 保持按下 的时候,那么就可以判断它的状态(isSelected),在一个定时器方法中判断按键的状态,根据这个状态值,就可以进行相应处理,恩,这样似乎简单了许多。
p>
p>注意:在这个情景中其实也是多点触摸的,注意到按键按下是一个触摸点,然后在执行某一个事件,也是要触摸屏幕执行,那么又是一个触摸点。那么我们同样要开启多点触摸,这一点很重要。
p>然而,如果我们 在按键按下的时候执行的事件,只是需要一个触摸点,那么注册为 TargetedDelegate 就可以了;如果需要多个触摸点,那么注册为 StandardDelegate。
p>
p>①首先用到 CCMenuItem
p>在这类按键中 有两个 属性:
p>[cpp]
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>