0

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

助けてください。私は何年もの間試みてきましたが、成功していません。ありがとう。ハリー。

4

2 に答える 2

3

これは、あなたが何を求めているかについての私の最善の推測であり、それを確認するものは何もありません.

コードで 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 の宣言をいじったり、メッセージの受信を停止したりすることはできませんが、その内部で無効な状態を確認することはできます。

于 2010-03-25T21:39:47.890 に答える
1

ハリー - あなたがしたように320a を定数にしたいかもしれませんBALL_RADIUS(あなたはこれが iPad で動作できるようにしたいと思うでしょう? 多分?) そして、5 を繰り返すコードを因数分解することを検討するかもしれません.独自の方法に回します。aehilrs のコードは、加速度計に必要なことを正確に実行する必要があります。

-(int) limitTravel:(position) {
  if (position > MAX_POSITION-BALL_RADIUS)
     return MAX_POSITION-BALL_RADIUS;
  if (position < BALL_RADIUS)
     return BALL_RADIUS;
}

制限コードの動作を変更する場合は、1 か所だけ変更する必要があります。320CGPointと同じ理由で、マジック ナンバーも定数として使用する方が適切です。

于 2010-03-25T23:14:47.910 に答える