Лучший способ перемещения персонажа по экрану с помощью джойстика? - PullRequest
0 голосов
/ 19 марта 2011

Я создаю игру.Я хотел бы иметь джойстик, который перемещает персонажа по экрану.Вроде как контроллер видеоигры.Любая помощь будет принята с благодарностью!Спасибо!

Вот что я сейчас использую, ребята.Глядя на это, я не думаю, что он генерирует ввод:

-(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 Ответ

3 голосов
/ 19 марта 2011

Вы можете получить direction и speed из vector, произведенного джойстиком.Обычно на входе джойстика генерируется нормализованная 2-мерная позиция, значения 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;

Вы можете видеть два движения: вращение и перемещение вперед.Люди обычно устанавливают две разные скорости, чтобы контролировать их.Вы также можете сделать по одному, например, сначала вращение, а затем пересылку.Удачи!:)

[ОБНОВЛЕНИЕ]

Ну, если вы не хотите вращать его, вы можете просто сделать шаг 2 с «направлением» вместо «просмотра».Кроме того, вы можете получить «вектор ввода», вычитая center position джойстика из the actual movement (я полагаю, что это позиция из джойстика), а затем нормализуйте его.

...