ページ 11

回転する方向がおかしい

Posted: 2010年11月10日(水) 01:34
by ready
あるオブジェクトを選択している時のみに左右に回転(一定まで言ったら反対方向に)させるような処理を作っております。
下記の様なソースなのですが2個以上選択すると左右の限界値を超えて
一回転してしまったり小刻みに動いたりと謎の減少が発生してしまいます。
なぜなのかイマイチわからないのですがソースが悪い部分がありますでしょうか?
//Mouse.touch.Flag マウスがクリックしているか

// フルーツ
class FRUIT{
public:
    bool Flag;            // 表示フラッグ
    float Rot;            // 角度
    bool TouchFlag;        // タッチフラッグ
    void TouchRotation(void);
};

// タッチした時のローテーション
void FRUIT::TouchRotation(void){
    static bool dir = false; // falseなら→に
    if( dir ) this->Rot += 1.0f;
    else this->Rot -= 1.0f;
    
    // 限界値
    if( this->Rot >= 15 ) dir = false;
    if( this->Rot <= -15 ) dir = true;
}

static FRUIT Fruit[MAP_H][MAP_W];

//-------------------------------------------------//

void Init(){
    // フルーツ
    texFruit.imagePath = [[NSBundle mainBundle] pathForResource:@"fruit" ofType:@"png"];
    texFruit.texture = SZGLLoadTexture(texFruit);
    
    // フルーツの初期化
    for(int i=0; i<MAP_H; i++){
        for(int j=0; j<MAP_W; j++){
            Fruit[j].Flag = true;
            Fruit[j].Rot = 0;
        }
    }
}

void Loop(){
    switch ( Game.Mode ) {
        case M_GAME:
            for(int i=0; i<MAP_H; i++){
                for(int j=0; j<MAP_W; j++){
                    if( Fruit[j].Flag ){
                        // ローテーション関連
                        if( Mouse.touch.Flag && !Fruit[j].TouchFlag ){
                            int x = int((Mouse.touchX-16)/FRUIT_SIZE);
                            int y = int((Mouse.touchY-48)/FRUIT_SIZE);
                            if( x < 0 ) x = 0;
                            if( x > MAP_W-1 ) x = MAP_W-1;
                            if( y < 0 ) y = 0;
                            if( y > MAP_H-1 ) y = MAP_H-1;
                            Fruit[y][x].TouchFlag = true;
                        }
                        if( Fruit[j].TouchFlag ) Fruit[j].TouchRotation();
                        if( !Mouse.touch.Flag ){//&& Fruit[j].Rot == 0 ){
                            Fruit[j].TouchFlag = false;
                            Fruit[j].Rot = 0;
                        }
                    }
                }
            }
            break;
    }
}

Re:回転する方向がおかしい

Posted: 2010年11月10日(水) 14:06
by うしお
おそらくオブジェクティブCだと思いますが、
言語を明記されたほうがよいかと思います。

static bool dir = false; // falseなら→に
のstatic が気になるところです
2つのときに共有されて、いるので想像した動作にならないのではないかと推測します。
チェックしてみてはいかがでしょうか?

Re:回転する方向がおかしい

Posted: 2010年11月11日(木) 16:08
by ready
うしお様
独自のグローバル変数を用意したところ出来ました。
ありがとうございます。
非常に助かりました><

Re:回転する方向がおかしい

Posted: 2010年11月11日(木) 16:08
by ready
解決マークをつけさせて頂きます。