我正在制作游戏。我想有一个操纵杆可以在屏幕上移动角色。有点像视频游戏控制器。任何帮助将不胜感激!谢谢!
这是我目前正在使用的,伙计们。从查看它,我认为它不会产生输入:
-(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;
}
答案 0 :(得分:3)
您可以从操纵杆生成的direction
获取speed
和vector
。通常,操纵杆输入生成标准化的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.
将角色的look-at
向量(它是表示角色当前方向的归一化向量)设置为direction
。如果要平滑旋转字符,请在更新中从当前look-at
向量进行插值到direction
。
使用position
speed
new_position = current_position + look-at * speed * time;
你可以看到有两种动作,旋转和转发。人们通常设置两种不同的速度常数来控制它们。您也可以一次执行一个,如先旋转然后转发。祝好运! :)
[UPDATE]
好吧,如果你不想旋转它,你可以用“方向”而不是“看”来做第2步。此外,您可以通过从center position
中减去操纵杆的the actual movement
来生成“输入向量”(我假设这是操纵杆中的位置),然后将其标准化。