2011-03-19 9 views
0

私はゲームを作っています。キャラクターを画面の周りに動かすジョイスティックを持っていたいと思います。ビデオゲームコントローラのようなもの。どんな助けでも大歓迎です!ありがとう!ジョイスティックで文字を画面の周りに移動させるには?

ここに私が現在使用しているものがあります。それを見てから、私はそれが入力を生成することを考えていない:

-(id) init 
{ 


if((self=[super initWithColor:ccc4(255,255,255,255)])) { 
    self.isTouchEnabled = YES; 

    SneakyJoystickSkinnedBase *leftJoy = [[[SneakyJoystickSkinnedBase alloc] init] autorelease]; 
    leftJoy.position = ccp(72,72); 
    leftJoy.backgroundSprite = [CCSprite spriteWithFile:@"dpad.png"]; 
    leftJoy.thumbSprite = [CCSprite spriteWithFile:@"joystick.png"]; 
    leftJoy.joystick = [[SneakyJoystick alloc] initWithRect:CGRectMake(0,0,128,128)]; 
    leftJoyStick = [leftJoy.joystick retain]; 
    [self addChild:leftJoy]; 

    [[CCDirector sharedDirector] setAnimationInterval:1.0f/60.0f]; 

} 
return self; 

}

+3

オンスクリーンコントロールでは、iDevicesではほとんど意味がありません。私の同僚は、「あなたのゲームがDパッドとボタン、またはジョイスティックに依存しているなら、それは間違っている」と宣言しました。私は彼が正しいと思います。自分自身を制限しないでください。 – jer

+0

ええ、しかし、最も成功したゲームにはジョイスティックなどがあります。 – ipodfreak0313

+0

ジョイスティックは、画面やPC全体を動かすのが狂気になるデスクトップ上では理にかなっています...加速度計とジャイロスコープを使って電話機全体をジョイスティックに変えるだけです。 –

答えて

3

あなたはジョイスティックによって生成vectorからdirectionspeedを得ることができます。通常、ジョイスティック入力は、xとyの値が-1と1の間にある正規化された2d位置を生成します。たとえば、Upは(0,1.0)、Rightは(0,1.0)、Leftは(-1.0,0)、Downは(0、-1.0)。この入力ベクトルが得られれば、2つの値を得ることができます。

direction = normalize(input_vector); 
speed = length(input_vector) * SCALE_CONSTANT; 
// SCALE_CONSTANT is a custom value to get a real speed. 
  1. directionに(それはキャラクターの現在の方向を表す正規化ベクトルである)キャラクターのlook-atベクトルを設定します。文字をスムーズに回転させたい場合は、現在のlook-atベクトルから補間を行い、更新のdirectionにします。

  2. 更新キャラクターのpositionspeed

    new_positionと= current_position +ルックで*スピード*時間。

回転と転送の2つの動きがあります。人々は通常、それらを制御するために2つの異なる速度定数を設定する。最初に回転してから転送するようなときには、一度に1つずつ行うこともできます。がんばろう! :)

[UPDATE]

さて、あなたはそれを回転させたくない場合は、あなただけ行うことができます代わりに「ルック・アット」の「方向」とステップ2。また、the actual movementからジョイスティックのcenter position(これはジョイスティックからの位置であると仮定します)を引いて「入力ベクトル」を生成し、それを正規化することができます。

+0

@young問題は、入力ベクトルがあるかどうかわかりません。私のジョイスティックは動きます。私はそれがその速度とそのようなものを生成するかどうかはわかりません。 – ipodfreak0313

+0

あなたは「私はジョイスティックをすべてプログラムしました」と言ったが、それはどういう意味ですか?あなたのプログラムからどのようにジョイスティックにアクセスしますか?入力イベントをどのように検出しますか? – young

+0

@youngまた、キャラクターの回転を回転させたくありません(少なくとも、今はない)。私が望むのは、実際のスプライトを別の場所にスムーズに移動することだけです。 – ipodfreak0313

関連する問題