0

我正在使用 iPhone 的加速度计使物体移动。我希望能够使这个功能工作,而不是根据不同的状态工作。

我有我的加速度计功能的代码,我想把它放到一个 BOOL 中,这样我可以在需要时调用它,但是我遇到了问题。谁能帮我把这段代码放到一个名为:

-(BOOL) accelerometerWorks

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
valueX = acceleration.x*25.5;


int newX = (int)(ball.center.x +valueX);
if (newX > 320-BALL_RADIUS)
    newX = 320-BALL_RADIUS;
if (newX < 0+BALL_RADIUS)
    newX = 0+BALL_RADIUS;


int XA = (int)(balloonbit1.center.x +valueX);
if (XA > 320-BALL_RADIUS)
    XA = 320-BALL_RADIUS;
if (XA < 0+BALL_RADIUS)
    XA = 0+BALL_RADIUS;

int XB = (int)(balloonbit2.center.x +valueX);
if (XB > 320-BALL_RADIUS)
    XB = 320-BALL_RADIUS;
if (XB < 0+BALL_RADIUS)
    XB = 0+BALL_RADIUS;

int XE = (int)(balloonbit5.center.x +valueX);
if (XE > 320-BALL_RADIUS)
    XE = 320-BALL_RADIUS;
if (XE < 0+BALL_RADIUS)
    XE = 0+BALL_RADIUS;

int XF = (int)(balloonbit6.center.x +valueX);
if (XF > 320-BALL_RADIUS)
    XF = 320-BALL_RADIUS;
if (XF < 0+BALL_RADIUS)
    XF = 0+BALL_RADIUS;


int XH = (int)(balloonbit8.center.x +valueX);
if (XH > 320-BALL_RADIUS)
    XH = 320-BALL_RADIUS;
if (XH < 0+BALL_RADIUS)
    XH = 0+BALL_RADIUS;



ball.center = CGPointMake (newX, 415);
balloonbit1.center = CGPointMake (XA, 408);
balloonbit2.center = CGPointMake (XB, 395);
balloonbit5.center = CGPointMake (XE, 388);
balloonbit6.center = CGPointMake (XF, 413);
balloonbit8.center = CGPointMake (XH, 426);
}

请帮忙。我已经尝试了很长时间没有成功。谢谢。哈利。

4

2 回答 2

3

这是我对你所追求的最好的猜测,没有什么可以验证的。

如果您只想在代码中声明一个 BOOL 值,请将

BOOL accelerometerWorks;

在您的 .h 文件中。

否则,如果您想要一个函数根据需要检查游戏状态,请执行以下操作:

-(BOOL) accelerometerWorks{
    //check conditions, return YES or NO...
    return time == 0;
}

还有这个:

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration   *)acceleration{
    if(![self accelerometerWorks]) return;
    valueX = acceleration.x*25.5;


    int newX = (int)(ball.center.x +valueX);
    if (newX > 320-BALL_RADIUS)
        newX = 320-BALL_RADIUS;
    if (newX < 0+BALL_RADIUS)
        newX = 0+BALL_RADIUS;
    //etc.
}

您不能乱用 accelerometer:didAccelerate 的声明,否则您将停止接收消息,但您可以检查其中的无效状态。

于 2010-03-25T21:39:47.890 回答
1

哈利 - 你也可能想让320a 成为常数,就像你做的那样BALL_RADIUS(你希望它能够在 iPad 上工作,对吗?也许吧?)你也可以考虑分解你重复五次的代码次进入自己的方法。aehilrs 的代码应该完全符合您对加速度计的要求。

-(int) limitTravel:(position) {
  if (position > MAX_POSITION-BALL_RADIUS)
     return MAX_POSITION-BALL_RADIUS;
  if (position < BALL_RADIUS)
     return BALL_RADIUS;
}

如果您决定更改限制代码的工作方式,您只需更改一处即可。出于与 320 相同的原因,您的CGPoint幻数作为常数也会更好。

于 2010-03-25T23:14:47.910 回答