关于手机游戏中的炮弹轨迹——抛物线
在手机游戏的开发中经常会根据一条抛物线来模拟炮弹的轨迹。在已知炮弹的发射点,射程和射击高度的情况下,完全可由
抛物线方程来模拟出炮弹的运行轨迹,当然,这里的模拟只是理想状态下的,并没有把风力等因素考虑进去。
根据炮弹的发射点(x1,y1),射程(cs)和射击高度(h)可得出抛物线的三个点:
p1:(x1,y1)
p2:(x2,y2) x2=x1+cs/2, y2=y1+h
p3:(x3,y3) x3=x1+cs, y3=y1
根据这三个点可列出抛物线方程
ax1^2+bx1+c=y1
ax2^2+bx2+c=y2
ax3^2+bx3+c=y3
计算方程得到该抛物线的系数a,b,c
得到a,b,c后,即可根据a,b,c计算出抛物线每点的轨迹。
下面的例子将说明如何绘制轨迹:
例子源码及图片下载
我的MSN是zhagy_1981@hotmail.com,欢迎指出不足之处。
例子运行效果如下:
例子canvas中的代码
import java.io.IOException;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.SPRite;
import javax.microedition.lcdui.game.TiledLayer;
public class MyCanvas extends GameCanvas implements Runnable
{
//小船的位置
int x,y;
//小船精灵
Sprite ship;
//地图
TiledLayer background;
//图片
Image ship_IMG, sea_IMG, bullet_IMG;
//炮弹
Bullets bullets;
public MyCanvas()
{
super(true);
//初始化船的位置
x = 10;
y = 60;
try
{
ship_IMG = Image.createImage("/ship.png");
sea_IMG = Image.createImage("/sea.png");
bullet_IMG = Image.createImage("/bullet.png");
}
catch (IOException e)
{
e.printStackTrace();
}
//初始化炮弹
bullets = new Bullets(bullet_IMG);
//初始化小船
ship = new Sprite(ship_IMG, 24, 30);
ship.setPosition(x, y);
//初始化地图
background = new TiledLayer(20, 6, sea_IMG, 32, 32);