2011-08-26 3 views
0

im을 벗어나지 못하게 막지 만 코드가 빌드 되어도 스프라이트가 화면을 벗어나는 것을 멈추지 않는 것처럼 보입니다. 누구든지 스프라이트가 화면의 x 좌표를 따라 화면의 가장자리에 오면 멈출 수 있도록 어떻게 변경해야하는지 알려줄 수 있습니까?xcode 아래 코드를 사용하여 sprite가 화면 cocos2d

-(void)applyJoystick:(SneakyJoystick *)aJoystick toNode:(CCNode *)tempNode forTimeDelta:(float)deltaTime 
{ 
CGPoint scaledVelocity = ccpMult(aJoystick.velocity, 1024.0f); 
CGPoint newPosition = ccp(tempNode.position.x + scaledVelocity.x * deltaTime, tempNode.position.y); 
CGSize screenSize = [CCDirector sharedDirector].winSize; 
CGFloat spriteWidth = vikingSprite.contentSize.width; 
CGFloat x = tempNode.position.x + scaledVelocity.x * deltaTime; 
if (x < 0 + (spriteWidth/2)) { 
    x = 0 + (spriteWidth/2); 
} else if (x > screenSize.width - (spriteWidth/2)) { 
    x = screenSize.width - (spriteWidth/2); 

} 
[tempNode setPosition:newPosition]; 
if (jumpButton.active == YES) { 
    CCLOG(@"Jump button is pressed."); 
} 
if (attackButton.active == YES) { 
    CCLOG(@"Attack button is pressed."); 
} 
} 

감사

답변

0

설정 edge as boundary.

boundary.SetAsEdge(b2Vec2(0,0), b2Vec2(winSize.width/PTM_RATIO, 0)); 

Ray Wenderlich에게 맥주를 보내는 것을 잊지 마십시오.

+1

메신저를 사용하지 않고 코코스 2d 엔진을 사용할 수 있습니다. 여전히 코드 비트를 사용할 수 있습니다. – sam

+0

아니요. 그러나 Box2D를 고려해야합니다. 그런 코드를 다시 구현하면 아마도 당신을 움푹 들어가게 할 것입니다. 당신은 실제로 하나를 만났습니다;) – Kheldar

0

위치를 재설정하는 것을 잊어 버리셨습니까?

if (x < 0 + (spriteWidth/2)) { 
x = 0 + (spriteWidth/2); 
tempNode.position.x = x; 
} else if (x > screenSize.width - (spriteWidth/2)) { 
x = screenSize.width - (spriteWidth/2); 
    tempNode.position.x = x; 


} 
+0

미안하지만 Lvalue가 과제의 왼쪽 피연산자로 요구되었습니다. 다른 제안 사항이 있습니까? – sam

2

변경 한 변수 x를 수정 한 후에는 vikingsprite에 다시 할당하지 않습니다.

그래서 당신은 같은 작업을 수행해야합니다

if (x < 0 + (spriteWidth/2)) { 
    x = 0 + (spriteWidth/2); 
} else if (x > screenSize.width - (spriteWidth/2)) { 
    x = screenSize.width - (spriteWidth/2); 

} 
CGPoint vikingPos = cpp(x, vikingsprite.position.y); 
[vikingsprite setPosition:vikingPos]; 

내 구문은 내가 목표 - C를 많이 쓰지 않는다 틀릴 수도 있지만, 내가적인 Cocos2D

의 C++ 버전적인 Cocos2D-X를 사용