關於手機游戲中的炮彈軌跡——拋物線
在手機游戲的開發中經常會根據一條拋物線來模擬炮彈的軌跡。在已知炮彈的發射點,射程和射擊高度的情況下,完全可由
拋物線方程來模擬出炮彈的運行軌跡,當然,這裡的模擬只是理想狀態下的,並沒有把風力等因素考慮進去。
根據炮彈的發射點(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是[email protected],歡迎指出不足之處。
例子運行效果如下:
例子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);