【问题标题】:The best way to have a character moved around the screen with a joystick?用操纵杆让角色在屏幕上移动的最佳方式是什么?
【发布时间】:2011-03-19 19:46:57
【问题描述】:

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

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

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

}

【问题讨论】:

  • 屏幕控制在 iDevices 上几乎没有意义。我的一位同事曾经宣称,“如果你的游戏依赖于方向键和按钮或操纵杆,那你就错了。”我完全认为他是对的。不要限制自己。
  • 是的,但一些最成功的游戏都有操纵杆之类的东西。
  • 操纵杆在桌面上很有意义,因为移动整个屏幕或 PC 会很疯狂……只需使用加速度计和陀螺仪将整个手机变成操纵杆。​​span>
  • 没有。我已经走到这一步了。我已经把操纵杆全部编程好了,我只想让一个角色在屏幕上移动!!
  • 这只是我的意见,但将其调整为使用来自加速度计和/或陀螺仪的输入不会花费更多的精力,并且会带来更好的用户体验。想想那些小小的用户吧!

标签: iphone xcode cocos2d-iphone xcode4


【解决方案1】:

你可以从摇杆产生的vector中得到directionspeed。通常,操纵杆输入会生成标准化的 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. speed更新你角色的position

    new_position = current_position + 观察 * 速度 * 时间;

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

[更新]

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

【讨论】:

  • @young 问题是,我不知道我是否有那个输入向量!我的操纵杆只是移动。我不确定它会产生它的速度和类似的东西..
  • 你说“我已经把操纵杆全部编程了”,这是什么意思?你如何从你的程序中访问操纵杆?你如何检测它的输入事件?
  • @young 我也不想旋转角色的旋转,(至少现在不是)。我想要的只是将实际的精灵顺利移动到不同的位置。
  • 我知道操纵杆在被点击时的实际移动,但我不确定它是否会生成输入。
  • 您希望我编辑问题并发布我的操纵杆代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
相关资源
最近更新 更多