IPHONE SDK, как поставить функцию Void в мою BOOL ??? ПОЖАЛУЙСТА! - PullRequest
0 голосов
/ 25 марта 2010

Я использую акселерометр IPhone, чтобы заставить объект двигаться. Я хочу, чтобы эта функция работала, а не работала в зависимости от разных состояний.

У меня есть код для функции акселерометра, и я хочу поместить его в BOOL, чтобы я мог вызывать его, когда мне это нужно, но у меня проблемы. Может ли кто-нибудь помочь мне поместить этот код в 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);
}

Пожалуйста, помогите. Я пытался целую вечность без успеха. Благодарю. Гарри.

Ответы [ 2 ]

3 голосов
/ 26 марта 2010

Вот мое лучшее предположение о том, что вы ищете, и мне нечего проверить.

Если все, что вы хотите сделать, это объявить значение 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.
}

Вы не можете возиться с объявлением акселерометра: didAccelerate, иначе вы просто перестанете получать сообщения, но МОЖЕТЕ проверить недействительное состояние внутри него.

1 голос
/ 26 марта 2010

Гарри - вы также можете сделать 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;
}

Если вы решите изменить работу ограничивающего кода, вам придется изменить его только в одном месте. Ваши CGPoint магические числа также будут лучше, чем константы, по той же причине, что и 320.

...