2012-10-26 41 views
2

我开发使用陀螺仪保持敌人相对同一个地方比赛,用下面的代码:显示的UIImageView在屏幕上的任意位置

if([motionManager isGyroAvailable]) 
{ 
    [motionManager setGyroUpdateInterval:0.05]; 

    [motionManager startGyroUpdatesToQueue:[NSOperationQueue mainQueue] 
           withHandler:^(CMGyroData *gyroData, NSError *error) 
    { 
     valueX3 = gyroData.rotationRate.y* 50; 
     valueY3 = gyroData.rotationRate.x* 50; 

     int newX3 = (int)(enemyufoG.center.x +valueY3); 
     int newY3 = (int)(enemyufoG.center.y -valueX3); 

     CGPoint newCenter2 = CGPointMake(newX3, newY3); 

     enemyufoG.center = newCenter2; 

     valueX2 = gyroData.rotationRate.y* 50; 
     valueY2 = gyroData.rotationRate.x* 50; 

     int newX2 = (int)(enemyufoR.center.x +valueY2); 
     int newY2 = (int)(enemyufoR.center.y -valueX2); 

     CGPoint newCenter = CGPointMake(newX2, newY2); 

     enemyufoR.center = newCenter; 

     valueX = gyroData.rotationRate.y* 50; 
     valueY = gyroData.rotationRate.x* 50; 

     int newX = (int)(enemyAlien.center.x +valueY); 
     int newY = (int)(enemyAlien.center.y -valueX); 

     CGPoint newCenter3 = CGPointMake(newX, newY); 

     enemyAlien.center = newCenter3; 
    }]; 
} 

一旦你拍摄的敌人是在该枪的十字线隐藏了UIImageView,然后使用NSTimer调用另一个显示该方法的方法。我想让敌人重新出现在屏幕上的任意位置。

CGPoint pos = enemyAlien.center; 

if ((pos.x > 254) && (pos.x < 304) && (pos.y > 140) && (pos.y < 160 && _ammoCount != 0)) 
{ 
    enemyAlien.hidden = YES; 
    [dangerBar setProgress:dangerBar.progress-0.10]; 
    _killCount = _killCount+3; 
    [killCountField setText: [NSString stringWithFormat:@"%d", _killCount]]; 

    timer = [NSTimer scheduledTimerWithTimeInterval: 4.0 
              target: self 
              selector: @selector(showAlien) 
              userInfo: nil 
              repeats: NO]; 
} 

- (void) showAlien { 

enemyAlien.hidden = NO; 

} 

当我尝试使用enemyAlien.center = enemyAlien.center + arc4random()%100;以上enemyAlien.hidden = NO,我得到以下错误:

'Invalid operands to binary expression ('CGPoint (aka 'struct CGPoint') and 'unsigned int').

回答

3

你试图整数添加到cgpoint。 试试这个。

enemyAlien.center = CGPointMake(enemyAlien.center.x + (arc4random()%100),enemyAlien.center.y + (arc4random()%100)); 

虽然这只会移动对角方向的外星人。您应该将其更改为以下内容以获得更好的体验。

enemyAlien.center = CGPointMake((arc4random()%SCREEN_WIDTH),(arc4random()%SCREEN_HEIGHT)); 

其中SCREEN_WIDTH和SCREEN_HEIGHT是您的运动场的尺寸。

+0

这很好,谢谢!我曾试图做到这一点,你的方式虽然复杂得多,但:) –

相关问题