用操纵杆让角色在屏幕上移动的最佳方法是什么?

时间:2011-03-19 19:46:58

标签: iphone xcode cocos2d-iphone xcode4

我正在制作游戏。我想有一个操纵杆可以在屏幕上移动角色。有点像视频游戏控制器。任何帮助将不胜感激!谢谢!

这是我目前正在使用的,伙计们。从查看它,我认为它不会产生输入:

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

}

1 个答案:

答案 0 :(得分:3)

您可以从操纵杆生成的direction获取speedvector。通常,操纵杆输入生成标准化的2d位置,其x和y值介于-1和1之间。例如,Up为(0,1.0),Right为(0,1.0),Left为(-1.0,0),Down为(0,-1.0)。获得此输入向量后,您可以获得这两个值。

direction = normalize( input_vector );
speed = length( input_vector ) * SCALE_CONSTANT; 
// SCALE_CONSTANT is a custom value to get a  real speed. 
  1. 将角色的look-at向量(它是表示角色当前方向的归一化向量)设置为direction。如果要平滑旋转字符,请在更新中从当前look-at向量进行插值到direction

  2. 使用position

    更新角色的speed

    new_position = current_position + look-at * speed * time;

  3. 你可以看到有两种动作,旋转和转发。人们通常设置两种不同的速度常数来控制它们。您也可以一次执行一个,如先旋转然后转发。祝好运! :)

    [UPDATE]

    好吧,如果你不想旋转它,你可以用“方向”而不是“看”来做第2步。此外,您可以通过从center position中减去操纵杆的the actual movement来生成“输入向量”(我假设这是操纵杆中的位置),然后将其标准化。