IPhone SDK, как поместить void -функцию в мою ловушку ??? ПОЖАЛУЙСТА!
Вопрос
Я использую акселерометр 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.