IPhone SDK, как поместить void -функцию в мою ловушку ??? ПОЖАЛУЙСТА!

StackOverflow https://stackoverflow.com/questions/2519224

  •  22-09-2019
  •  | 
  •  

Вопрос

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

У меня есть код для моей функции акселерометра, и я хочу поместить его в лоб, чтобы я мог называть его, когда мне это нужно, но у меня возникают проблемы. Может ли кто -нибудь помочь мне поместить этот код в ломтинг с именем:

-(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 в вашем коде, положите

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, или вы просто прекратите получать сообщения, но вы можете проверить наличие неверного состояния внутри него.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top