2010-03-25 13 views
0

我正在使用iPhone的加速度計使對象移動。我希望能夠使這個功能正常工作,並且不依賴於不同的狀態而工作。IPHONE SDK,如何把Void函數放到我的BOOL中?請!

我有我的代碼爲我的加速度計功能,我想把它放到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); 
} 

請幫忙。我一直在嘗試沒有成功的年齡。謝謝。 哈利。

+0

你在說你想要一個返回類型爲BOOL的方法...包含另一個方法嗎?您的代碼間距已關閉,但這就是我看起來的樣子。 – 2010-03-25 20:47:08

+0

什麼由布爾值'accelerometerWorks'表示,您打算如何使用它? – warrenm 2010-03-25 20:50:57

回答

3

這是我最好的猜測,關於你在做什麼之後,沒有什麼可以驗證它。

如果你想要做的就是在你的代碼聲明一個布爾值,把

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或者你只是停止接收消息,但你可以檢查它裏面的無效狀態。

+0

好的。我已經實現了這個代碼,它的工作原理, 但是,當我嘗試並返回YES和NO它不會工作。這是我得到的。 (空)加速度計:(UIA加速度計*)加速度計加速度:(UIA加速度*)加速度數值X =加速度X * 25.5; \t if(![self accelerometerWorks])return; } - (BOOL)accelerometerWorks {{0121} {} {}} {x + valueX); \t如果(下一頁末> 320-BALL_RADIUS) \t \t下一頁末= 320-BALL_RADIUS; \t如果(下一頁末<0 + BALL_RADIUS) \t \t下一頁末= 0 + BALL_RADIUS; 返回YES; } 返回NO; } 然後當我試圖把它在 如果(時間== 0){ acceleremeterWorks = YES // 這裏否則可能?NO – Harry 2010-03-26 08:14:19

+0

Whaaaaaaaaaaaaaaaat?我就甩了你更多的代碼在一分鐘... – aehiilrs 2010-03-26 13:26:08

+0

@Harry這是否更有意義? – aehiilrs 2010-03-26 16:44:44

1

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; 
} 

如果您決定更改限制代碼的工作方式,則只需將其更改爲一個位置即可。你的CGPoint幻數與常數一樣也會更好,原因與320相同。

+0

我,出於某種原因,擔心BALL_RADIUS不是一個常數... – aehiilrs 2010-03-26 22:44:25

相關問題