【问题标题】:IPHONE SDK, How to put Void function into my BOOL??? PLEASE!IPHONE SDK,如何将 Void 函数放入我的 BOOL 中???请!
【发布时间】:2010-03-25 20:44:24
【问题描述】:

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

我的 Accelerometer 函数有我的代码,我想将它放入 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);
}

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

【问题讨论】:

  • 你是说你想创建一个返回类型为 BOOL 的方法...包含另一个方法?您的代码间距已关闭,但在我看来就是这样。
  • 布尔值accelerometerWorks代表什么,你打算怎么用?

标签: iphone void boolean


【解决方案1】:

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

如果您只想在代码中声明一个 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 的声明,否则您将停止接收消息,但您可以检查其中的无效状态。

【讨论】:

  • 好的。我已经实现了这段代码并且它可以工作,但是当我尝试返回 YES 和 NO 时它不会工作。这就是我所拥有的。 -(void) 加速度计:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{ valueX = acceleration.x*25.5; if(![self accelerometerWorks]) 返回; } -(BOOL) accelerometerWorks{{ int newX = (int)(ball.center.x +valueX);如果 (newX > 320-BALL_RADIUS) newX = 320-BALL_RADIUS;如果 (newX
  • @Harry 这更有意义吗?
  • 是的,现在很有意义!谢谢。对不起,麻烦大声笑。干杯,生病添加代表或其他任何东西。
【解决方案2】:

Harry - 你也可能想让320 成为一个常数,就像你对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 幻数作为常量也会更好。

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多