0
A
回答
0
我使用抛运动的公式来做到这一点,http://en.wikipedia.org/wiki/Projectile_motion,与茯苓一起行动。这里有一个可能的方法:
- 首先
实现一个CCActionInterval
子类,它接收弹丸公式参数,并更新炮弹位置。在这种情况下,ProjectileAction
。这些都是你需要的关键方法过程:
-(void) startWithTarget:(id)target
{
self.initialPosition = [target position];
self.elapsedTime = 0;
[super startWithTarget:target];
}
-(void) update: (ccTime) tt
{
self.elapsedTime += tt;
float t = self.elapsedTime;
float theta = CC_DEGREES_TO_RADIANS(self.angle);
float v0 = self.velocity;
float g = self.gravitationalAcceleration;
double x = v0 * cos(theta) * t;
double y = v0 * sin(theta) * t - 0.5 * g * t * t ;
[self.target setPosition: ccp(self.initialPosition.x + (float)x, self.initialPosition.y + (float)y)];
}
- 二
使用您的滑动手势识别速度,这将转化为球的初速度上面的等式中和到theVelocity
参数波纹管。我把那部分留给你。
- 三
运行的操作。即
ProjectileLaunch* action = [ProjectileLaunch actionWithDuration:10
angle:45
initialVelocity:theVelocity
g:9.8];
[sprite runAction:action];
我希望这可以帮助你。
问候。
2
一个简单而有效的方法,无需明确使用任何物理引擎,就是在更新循环中以欧拉风格手动步进球体的速度和位置。
在典型的情况下(与向下重力),则必须在y方向上不恒定的速度和恒定的速度在x方向上,因此,下面的代码:
-(void) update: (ccTime) dt
{
// Step only the y-velocity
velocity_y += GRAVITY * dt;
// Step the position values and update the ball sprite position accordingly
ball.position.x += velocity_x * dt;
ball.position.y += velocity_y * dt;
}
然后,当检测滑动事件,
- 捕获的滑动速度(你将不得不计算在当前和最后一帧中的手指触摸的位置的变化)
- 乘以缩放因子如果需要的速度。
- 将* velocity_x *和* velocity_y *设置为这些初始值。
相关问题
- 1. NAO投掷球
- 2. 投掷物体
- 3. 如何开始使用cocos2D学习Chipmunk物理引擎?
- 4. 如何在投掷桶中投球?
- 5. Mockito投掷“通缉但未引用”
- 6. Android物理引擎
- 7. WPF物理引擎
- 8. Java物理引擎?
- 9. WPF物理引擎?
- 10. 通用物理引擎
- 11. 在投掷物体后激活物体
- 12. 如何使用投掷?
- 13. 赶上(...)在投掷上工作;没有任何对象?
- 14. 在Node.js中使用Oimo.js物理引擎(Oimo.js是前端引擎)
- 15. 建立一个迷你物理引擎的目标c/cocos2d
- 16. 按任务投掷异常
- 17. imagemin:dist任务投掷错误
- 18. Android有没有像样的物理引擎?
- 19. 是否有JavaScript的水物理引擎?
- 20. 我应该为我的游戏构建一个物理引擎,还是使用已有的物理引擎
- 21. VB二维物理引擎?
- 22. 安装Farseer物理引擎
- 23. 移动物理引擎
- 24. 沙质3d物理引擎
- 25. VB.net最佳物理引擎
- 26. 关于物理引擎
- 27. Havok物理引擎 - Android
- 28. 什么物理引擎会对Silverlight池引擎有好处?
- 29. 关于线性投影的自制物理引擎问题
- 30. Box2djs,JS物理引擎 - 为球对象设置背景图像?