0
我正嘗試使用加速度計在圓形邊界內移動精靈(球)。我可以毫無困難地將精靈(球)移動到空白屏幕上。但是現在我需要設置一個圓形邊界,以便在圓內限制運動。我有一個背景圖像,這是一種圖像的圓形類型。如果所有精靈(球)正在移動,那麼它應該只在這個圓形圖像內,我不希望球移出圓形圖像。我想知道如何在圓形背景圖像上設置邊界。請幫幫我。謝謝。如何使用cocos2d中的加速度計在圓形邊界內移動精靈
代碼:
if((self=[super init]))
{
bg=[CCSprite spriteWithFile:@"challenge-game.png"];
bg.position=ccp(240,160);
bg.opacity=180;
[self addChild:bg];
ball1=[CCSprite spriteWithFile:@"ball.png"];
ball1.position=ccp(390,180);
[self addChild:ball1];
ball2=[CCSprite spriteWithFile:@"ball1.png"];
ball2.position=ccp(240,20);
[self addChild:ball2];
ball3=[CCSprite spriteWithFile:@"ball2.png"];
ball3.position=ccp(100,180);
[self addChild:ball3];
size = [[CCDirector sharedDirector] winSize];
self.isAccelerometerEnabled=YES;
[self scheduleUpdate];
}
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
ballSpeedY = acceleration.x*20;
ballSpeedX = -acceleration.y*10;
}
-(void)updateBall1 {
float maxY1 = size.height - ball1.contentSize.height/2;
float minY1 = ball1.contentSize.height/2;
float newY1 = ball1.position.y + ballSpeedY;
newY1 = MIN(MAX(newY1, minY1), maxY1);
float maxX1 = size.width - ball1.contentSize.width/2;
float minX1 = ball1.contentSize.width/2;
float newX1 = ball1.position.x + ballSpeedX;
newX1 = MIN(MAX(newX1, minX1), maxX1);
NSLog(@"MAXY: %f MINY: %f NEWY: %f",maxY1,minY1,newY1);
ball1.position = ccp(newX1, newY1);
}
-(void)setPosition:(CGPoint)position
{
float dx=position.x-240;
float dy=position.y-160;
float r=bg.contentSize.width/2-ball1.contentSize.width/2;
if((dx*dx+dy*dy)>(r*r))
{
position.x=100;
position.y=100;
}
[super setPosition:position];
}
感謝您的答覆。沒有它的正義COCOS2D。我如何覆蓋setPosition方法?它屬於哪一類?幫我。提前致謝。 – BudHawk 2013-03-22 04:40:02
'CCNode'有一個屬性'position',它由內部'setPosition:(CGPoint)'方法處理。如果您要將CCSprite擴展到您想要限制的對象,只需添加一個方法' - (void)setPosition:(CGPoint)position' implementation file(.m)。 'position'參數是精靈想要移動的目標位置。現在,確保'position.x'和'position.y'在一個圓圈內。如果不是,則更正x和y並調用'[super setPosition:position]'。 – gberginc 2013-03-22 06:00:27
我正在使用CCSprite添加圖像。 – BudHawk 2013-03-22 06:39:05