Iphone 虚拟操纵杆问题
所以,我正在尝试在一些iPhone游戏中重新创建一个“虚拟操纵杆”。基本上,这就是问题所在,我可以确保用户正在触摸圆圈(即“虚拟操纵杆”),我也可以移动物体(或者至少能够移动它,因为从那时起我就把它弄乱了)。但是,我不能给它一个范围 我说的范围到底是什么意思 希望我能正确地解释范围是什么意思。所以,当你在游戏机控制器上摆弄实际的操纵杆时,你显然不能像我描述的那个圆圈那样把它拖到任何地方。所以,它有一个范围,在你看不到的假想圆内的任何地方 我尝试了以下方法:Iphone 虚拟操纵杆问题,iphone,collision-detection,Iphone,Collision Detection,所以,我正在尝试在一些iPhone游戏中重新创建一个“虚拟操纵杆”。基本上,这就是问题所在,我可以确保用户正在触摸圆圈(即“虚拟操纵杆”),我也可以移动物体(或者至少能够移动它,因为从那时起我就把它弄乱了)。但是,我不能给它一个范围 我说的范围到底是什么意思 希望我能正确地解释范围是什么意思。所以,当你在游戏机控制器上摆弄实际的操纵杆时,你显然不能像我描述的那个圆圈那样把它拖到任何地方。所以,它有一个范围,在你看不到的假想圆内的任何地方 我尝试了以下方法: - (void)touchesMove
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self.view];
if (g == true) {
if (joystick.center.x > 330 && currentPosition.x > 330 || joystick.center.x < 130 && currentPosition.x < 130) {
joystick.center = CGPointMake(joystick.center.x, currentPosition.y);
j = true;
}
if (joystick.center.y > 508 && currentPosition.y > 508 || joystick.center.y < 308 && currentPosition.y < 308) {
joystick.center = CGPointMake(currentPosition.x, joystick.center.y);
j = true;
}
if (j == false) {
joystick.center = CGPointMake(currentPosition.x, currentPosition.y);
}
}
}
-(无效)触摸移动:(NSSet*)触摸事件:(UIEvent*)事件{
UITouch*touch=[触摸任何对象];
CGPoint currentPosition=[触摸位置视图:self.view];
如果(g==true){
如果(操纵杆.center.x>330和¤tPosition.x>330 |操纵杆.center.x<130和¤tPosition.x<130){
操纵杆.center=CGPointMake(操纵杆.center.x,当前位置.y);
j=真;
}
如果(操纵杆.center.y>508和¤tPosition.y>508 | |操纵杆.center.y<308和¤tPosition.y<308){
操纵杆.center=CGPointMake(当前位置.x,操纵杆.center.y);
j=真;
}
如果(j==false){
操纵杆.center=CGPointMake(currentPosition.x,currentPosition.y);
}
}
}
在我开始解释我尝试的逻辑之前,有一个注意事项是,操纵杆位于屏幕上的(230408)处,我没有对坐标系做任何操作(因此它基于左上角)。现在,让我解释一下这是怎么回事:
如果(g==true)
如果触摸是否在圆圈上,并且由触摸开始设置,则实际上必须执行该操作
&¤tPosition.x>330
和currentPosition.x<130
这是为了防止用户无法将虚拟操纵杆移回中心位置else if
的作用与3相同if
,使用bool j确定是否执行了其他两个`if语句[touch view]==操纵杆
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
//self.joyStickCenter is the defined original center CGPoint.
if ([touch view] == self.joystickImageView) {
CGPoint location = [touch locationInView:self.view];
if((fabs(location.x - self.joyStickCenter.x) < 15.0) && (fabs(location.y - self.joyStickCenter.y) < 15.0)) {
[self.joystickImageView setCenter:location];
//your joystick action code
return;
}
else if((fabs(location.x - self.joyStickCenter.x) > 40.0) || (fabs(location.y - self.joyStickCenter.y) > 40.0)) {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.25f];
[self.joystickImageView setCenter:self.joyStickCenter];
[UIView commitAnimations];
return;
}
}
}
-(无效)触摸移动:(NSSet*)触摸事件:(UIEvent*)事件{
UITouch*touch=[触摸任何对象];
//self.joyStickCenter是定义的原始中心点。
如果([touch view]==self.joystickImageView){
CGPoint location=[触摸位置视图:self.view];
如果((fabs(location.x-self.joyStickCenter.x)<15.0)和&(fabs(location.y-self.joyStickCenter.y)<15.0)){
[self.joystickImageView设置中心:位置];
//操纵杆动作代码
返回;
}
else if((fabs(location.x-self.joyStickCenter.x)>40.0)| |(fabs(location.y-self.joyStickCenter.y)>40.0)){
[UIView beginAnimations:nil上下文:nil];
[UIView设置动画持续时间:0.25f];
[self.joystickImageView setCenter:self.joyStickCenter];
[UIView委员会];
返回;
}
}
}
您可以通过坐标的模数(使用矢量)计算范围:
谢谢,这花了点时间,但我明白了!
double r;
double a,b;
//coorX = (actual image center coordinate X)-(initial image center coordinate X)
a = pow(coorX,2);
//coorY = (actual image center coordinate Y)-(initial image center coordinate Y)
b = pow(coorY,2);
actualPosition = sqrt(a+b);