Ios 处理幻灯片移动cocos2d
我在Ios 处理幻灯片移动cocos2d,ios,objective-c,cocos2d-iphone,Ios,Objective C,Cocos2d Iphone,我在cocos2d中的游戏是以一种只获得触摸的方式处理用户触摸,而不是滑动/拖动移动的方式。如何在cocos2d/objective-c中处理滑动/拖动移动 例如,如果用户将手指滑动到屏幕上精灵播放器上方的任何点,我想将精灵播放器向上移动 这是我现在处理触摸的功能: -(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event { CGPoint touchLocation = [touch locationInNode:
cocos2d
中的游戏是以一种只获得触摸
的方式处理用户触摸,而不是滑动/拖动
移动的方式。如何在cocos2d/objective-c
中处理滑动/拖动
移动
例如,如果用户将手指滑动到屏幕上精灵播放器上方的任何点,我想将精灵播放器向上移动
这是我现在处理触摸的功能:
-(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint touchLocation = [touch locationInNode:self];
positionY1 = self.contentSize.height*.2;
positionY2 = self.contentSize.height*.40;
positionY3 = self.contentSize.height*.60;
float distY1Y2 = (positionY1 + positionY2)/2;
float distY2Y3 = (positionY2 + positionY3)/2;
float playerMove;
if (touchLocation.y <= distY1Y2) {
if(_player.position.y <= distY1Y2) {
playerMove = positionY1;
} else if(_player.position.y > distY1Y2 && _player.position.y < distY2Y3) {
playerMove = positionY1;
} else if (_player.position.y >= distY2Y3) {
playerMove = positionY2;
}
} else if (touchLocation.y > distY1Y2 && touchLocation.y < distY2Y3) {
if(_player.position.y <= distY1Y2) {
playerMove = positionY2;
} else if(_player.position.y > distY1Y2 && _player.position.y < distY2Y3) {
playerMove = positionY2;
} else if (_player.position.y >= distY2Y3) {
playerMove = positionY2;
}
} else if (touchLocation.y >= distY2Y3) {
if(_player.position.y <= distY1Y2) {
playerMove = positionY2;
} else if(_player.position.y > distY1Y2 && _player.position.y < distY2Y3) {
playerMove = positionY3;
} else if (_player.position.y >= distY2Y3) {
playerMove = positionY3;
}
}
//play audio
[[OALSimpleAudio sharedInstance] playEffect:@"pew-pew-lei.caf"];
//Disable another touch movement
//[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
// Move our sprite to touch location
CCActionMoveTo *actionMove = [CCActionMoveTo actionWithDuration:.2f position:CGPointMake(_player.position.x, playerMove)];
[_player runAction:actionMove];
//Enable another touch movement
//[[UIApplication sharedApplication] endIgnoringInteractionEvents];
/*
NSMethodSignature *sgn = [self methodSignatureForSelector:@selector(enableTouch:)];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature: sgn];
[inv setTarget: self];
[inv setSelector:@selector(enableTouch:)];
[NSTimer scheduledTimerWithTimeInterval:.7f
invocation:inv
repeats:NO];
*/
}
-(无效)触摸开始:(UITouch*)触摸事件:(UIEvent*)事件{
CGPoint touchLocation=[触摸位置Innode:self];
位置1=自身内容大小高度*.2;
位置2=自身内容大小高度*.40;
positionY3=自身内容大小高度*.60;
浮动距离y2=(位置y1+位置y2)/2;
浮动距离y2y3=(位置y2+位置y3)/2;
浮球运动;
if(touchLocation.y=distY2Y3){
playerMove=位置2;
}
}else if(touchLocation.y>distyy2&&touchLocation.y=distY2Y3){
playerMove=位置2;
}
}else if(touchLocation.y>=distY2Y3){
if(_player.position.y距离y2&&u player.position.y=distY2Y3){
playerMove=位置y3;
}
}
//播放音频
[[OALSimpleAudio sharedInstance]播放效果:@“pew pew lei.caf”];
//禁用另一个触摸移动
//[[UIApplication sharedApplication]beginIgnoringInteractionEvents];
//将精灵移动到触摸位置
CCActionMoveTo*actionMove=[CCActionMoveToActionWithDuration:.2f位置:CGPointMake(_player.position.x,playerMove)];
[_玩家runAction:actionMove];
//启用另一个触摸移动
//[[UIApplication sharedApplication]endIgnoringInteractionEvents];
/*
NSMethodSignature*sgn=[self-methodSignatureForSelector:@selector(enableTouch:)];
NSInvocation*inv=[NSInvocation invocationWithMethodSignature:sgn];
[inv setTarget:自我];
[库存设置选择器:@选择器(启用触摸:)];
[NSTimer scheduledTimerWithTimeInterval:.7f
调用:inv
重复:否];
*/
}
我将分享一些代码。请检查一下这个密码
您的问题:如果用户将手指滑动到精灵播放器上方屏幕的任何点,我想将精灵播放器向上移动。
答复:
这是为了,如果您触摸特定的精灵并移动该精灵……
我想这会帮助你:)
-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *myTouch=[touches anyObject];
CGPoint point=[myTouch locationInView:[myTouch view]];
point=[[CCDirector sharedDirector] convertToGL:point];
NSLog(@"point is %@",NSStringFromCGPoint(point));
}
-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *myTouch=[touches anyObject];
CGPoint point=[myTouch locationInView:[myTouch view]];
point=[[CCDirector sharedDirector] convertToGL:point];
CCNode *Sprite=[self getChildByTag:spriteTag]; // This is your sprite, which one you want to move.
[Sprite setPosition:point];
// This is the boundary for sprite, for what sprite is nor cross the screen.
if(Sprite.position.y>245)
[Sprite setPosition:ccp(Sprite.position.x,245)];
if(Sprite.position.y<25)
[Sprite setPosition:ccp(Sprite.position.x,25)];
if(Sprite.position.x<15)
[Sprite setPosition:ccp(15,Sprite.position.y)];
if(Sprite.position.x>465)
[Sprite setPosition:ccp(465,Sprite.position.y)];
}
// CGPoint initialPos; // in .h file
-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchPt = [touch locationInView:touch.view];
initialPos = [[CCDirector sharedDirector] convertToGL:touchPt];
}
-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *myTouch=[touches anyObject];
CGPoint currentPos=[myTouch locationInView:[myTouch view]];
currentPos=[[CCDirector sharedDirector] convertToGL:currentPos];
float diffX = currentPos.x - initialPos.x;
float diffY = currentPos.y - initialPos.y;
CGPoint velocity = ccp(diffX, diffY);
initialPos = currentPos;
[Sprite setPosition:ccpAdd([SmileBall position], velocity)];
}
- (void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *myTouch=[touches anyObject];
CGPoint currentPos=[myTouch locationInView:[myTouch view]];
currentPos=[[CCDirector sharedDirector] convertToGL:currentPos];
float diffX = currentPos.x - initialPos.x;
float diffY = currentPos.y - initialPos.y;
CGPoint velocity = ccp(diffX, diffY);
initialPos = currentPos;
[Sprite setPosition:ccpAdd([SmileBall position], velocity)];
}