如何使物理脉冲在所有设备上移动相同百分比的屏幕
How to make a physics impulse move the same percentage of the screen on all devices
所以我想做的是让物理脉冲似乎对所有设备都有相同的效果。所以基本上,如果我能想出一种方法来执行以下操作,我就能实现我的目标。
首先让我们通过消除所有重力来简化事情。
基本上我需要计算无论屏幕尺寸有多大,在相同的时间内让屏幕最左侧的物理对象到达屏幕最右侧所需的冲量.
我问的原因是我正在制作一个基于滑动幅度和角度的运动系统。但是我希望它在每台设备上都以相同的方式播放。我正在计算幅度
(距离(以虚拟点为单位))/(做手势所花费的时间)
然后我将它作为物理脉冲应用。
这是我正在使用的代码:
func Jump(angle: CGFloat, strength: CGFloat)
{
if (Ready == true)
{
var rangle:CGFloat = angle * CGFloat(M_PI / 180)
var translate:CGPoint = CGPoint(x: 1, y: 0)
var vx:CGFloat = ((translate.x * cos(rangle)) - (translate.y * sin(angle)))
var vy:CGFloat = ((translate.y * cos(rangle)) + (translate.x * sin(rangle)))
vx *= width
vy *= height
vx *= (strength)
vy *= (strength)
vx /= 4000
vy /= 4000
print("Applying Impulse VX: ")
print(vx)
print(" , VY: ")
print(vy)
println(" )")
var velx = Cavity.physicsBody?.velocity.dx
var vely = Cavity.physicsBody?.velocity.dy
Cavity.physicsBody?.velocity = CGVector(dx: CGFloat(velx!) / 2, dy: CGFloat(vely!) / 2)
Cavity.physicsBody?.applyImpulse(CGVectorMake(vx, vy))
//Cavity.physicsBody?.applyImpulse(CGVectorMake(1000 / width, 1000 / height))
}
}
所以基本上我希望它是这样的,如果传递了 1 或 2 的强度,它将在所有设备上产生相同的外观结果。
你能做的就是让强度相对于屏幕尺寸。
strengthAdjustment = (1/375*UIScreen.mainScreen().bounds.width)
这使用 iPhone 6 屏幕 (4.7") 宽度 (375 pts) 使强度 = 1。
在 iPhone 5 秒的情况下,屏幕将只有 320 点,并且只需要 0.8533 的脉冲强度即可在相同的时间内移动屏幕的宽度。
希望这对您有所帮助。
所以我想做的是让物理脉冲似乎对所有设备都有相同的效果。所以基本上,如果我能想出一种方法来执行以下操作,我就能实现我的目标。
首先让我们通过消除所有重力来简化事情。
基本上我需要计算无论屏幕尺寸有多大,在相同的时间内让屏幕最左侧的物理对象到达屏幕最右侧所需的冲量.
我问的原因是我正在制作一个基于滑动幅度和角度的运动系统。但是我希望它在每台设备上都以相同的方式播放。我正在计算幅度 (距离(以虚拟点为单位))/(做手势所花费的时间)
然后我将它作为物理脉冲应用。
这是我正在使用的代码:
func Jump(angle: CGFloat, strength: CGFloat)
{
if (Ready == true)
{
var rangle:CGFloat = angle * CGFloat(M_PI / 180)
var translate:CGPoint = CGPoint(x: 1, y: 0)
var vx:CGFloat = ((translate.x * cos(rangle)) - (translate.y * sin(angle)))
var vy:CGFloat = ((translate.y * cos(rangle)) + (translate.x * sin(rangle)))
vx *= width
vy *= height
vx *= (strength)
vy *= (strength)
vx /= 4000
vy /= 4000
print("Applying Impulse VX: ")
print(vx)
print(" , VY: ")
print(vy)
println(" )")
var velx = Cavity.physicsBody?.velocity.dx
var vely = Cavity.physicsBody?.velocity.dy
Cavity.physicsBody?.velocity = CGVector(dx: CGFloat(velx!) / 2, dy: CGFloat(vely!) / 2)
Cavity.physicsBody?.applyImpulse(CGVectorMake(vx, vy))
//Cavity.physicsBody?.applyImpulse(CGVectorMake(1000 / width, 1000 / height))
}
}
所以基本上我希望它是这样的,如果传递了 1 或 2 的强度,它将在所有设备上产生相同的外观结果。
你能做的就是让强度相对于屏幕尺寸。
strengthAdjustment = (1/375*UIScreen.mainScreen().bounds.width)
这使用 iPhone 6 屏幕 (4.7") 宽度 (375 pts) 使强度 = 1。
在 iPhone 5 秒的情况下,屏幕将只有 320 点,并且只需要 0.8533 的脉冲强度即可在相同的时间内移动屏幕的宽度。
希望这对您有所帮助。