计算模拟时间 Java
Calculating time of simulation in Java
我正在做一个关于杀鸟游戏的项目。一切正常,但对于任何给定的移动屏幕,我希望我的鸟在 35 秒 内穿过屏幕。在每 20 秒 之后,它的时间减少到 31。在 35 秒内穿过屏幕的数学公式(速度)是什么?目前正在更新 update 方法中的 x 轴值并为小鸟精灵创建矩形。
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import java.util.Random;
public class Birds extends GameObject implements View.OnTouchListener{
private Bitmap spritesheet;
private Rect rect;
public boolean firstTym = true;
private Animation animation = new Animation();
private String tag = "";
private int y,touchX,touchY;
public int x=0;
private long startTime;
public Birds(String tag)
{
this.tag = tag;
spritesheet = BitmapFactory.decodeResource(Constants.res, R.drawable.bird_sprites);
dy = 0;
if(Constants.Width > 1300) {
width = 120;
height = 140;
}
else {
width = 80;
height = 72;
}
Bitmap[] image = new Bitmap[5];
for (int i = 0; i < image.length; i++)
{
image[i] = Bitmap.createBitmap(spritesheet, i*width, 0, width, height);
}
animation.setFrames(image);
animation.setDelay(10);
startTime = System.nanoTime();
}
public void update()
{
if(!firstTym) {
// here i am updating speed of bird in x-axis.
//i want bird to cross the screen in 35 seconds
x += Constants.speed;
Log.e("speed = ","" + Constants.speed);
}
else
{
Random r = new Random();
r.nextInt(Constants.Width);
}
if(x > GamePanel.WIDTH){
Constants.missed ++;
x = 0;
}
if(y > GamePanel.HEIGHT)
{
x = 0;
}
}
public void draw(Canvas canvas) {
Random r = new Random();
if (x == 0 || firstTym) {
y = r.nextInt(GamePanel.HEIGHT - 150);
Constants.RAND = r.nextInt(1);
firstTym = false;
}
animation.update();
y += Constants.RAND;
rect = new Rect(x, y, x + 80, 72 + y);
setRect(rect);
setTag(tag);
canvas.drawBitmap(animation.getImage(), null, rect, null);
if (x < 0) {
canvas.drawBitmap(animation.getImage(), null, rect, null);
}
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
touchX = (int)event.getX();
touchY = (int)event.getY();
return true;
}
}
速度是距离随时间的变化。如果我在 2 秒内移动 10 米,那么我将以每秒 10 除以 2 米的速度移动,即每秒 5 米。我们可以写成s = D / t
,其中s
是速度,D
是距离,t
是时间。这样我们就可以安排它,以便我们可以根据其他两个来定义任何组件。
因此我们得到
s = D / t; // get the speed in term of distance and time
t = D / s; // get the time in term of distance and speed
D = t * s; // get the distance in term of time and speed
你有以像素为单位的距离 D(即宽度)和以秒为单位的时间。启动小鸟飞行时需要获取系统时钟时间startTime
,当前时间timeNow
。您将需要鸟开始的 x
和 y
位置,以及鸟在时间中的 x 和 y 位置 xEnd
,yEnd
,以及你希望它花费的时间 time
一开始你需要设置你需要的变量。我不做 java(讨厌)所以不记得 class 来获取系统时间。只需在参考文档中查找即可。
// set up
time = 35; // how long to cross the screen
x = 0; // start pos
y = 100; //
xEnd = screenWidth; // end pos
yEnd = 100;
startTime = ?.now() // ? is whatever class you get the system time from
通过所有这些来获得小鸟的位置。
// each frame get the time in seconds
timeNow = ?;
if( timeNow - startTime < time) { // make sure time is not over
currentX = x + ((xEnd - x) / time) * (timeNow - startTime))
currentY = y + ((yEnd - y) / time) * (timeNow - startTime))
}else{
// All done
}
当timeNow - startTime > time
你就知道一切都结束了
如果时间以毫秒或更小为单位,您需要通过除以将其转换为秒。即毫秒 time = timeInMillisecond / 1000;
我正在做一个关于杀鸟游戏的项目。一切正常,但对于任何给定的移动屏幕,我希望我的鸟在 35 秒 内穿过屏幕。在每 20 秒 之后,它的时间减少到 31。在 35 秒内穿过屏幕的数学公式(速度)是什么?目前正在更新 update 方法中的 x 轴值并为小鸟精灵创建矩形。
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import java.util.Random;
public class Birds extends GameObject implements View.OnTouchListener{
private Bitmap spritesheet;
private Rect rect;
public boolean firstTym = true;
private Animation animation = new Animation();
private String tag = "";
private int y,touchX,touchY;
public int x=0;
private long startTime;
public Birds(String tag)
{
this.tag = tag;
spritesheet = BitmapFactory.decodeResource(Constants.res, R.drawable.bird_sprites);
dy = 0;
if(Constants.Width > 1300) {
width = 120;
height = 140;
}
else {
width = 80;
height = 72;
}
Bitmap[] image = new Bitmap[5];
for (int i = 0; i < image.length; i++)
{
image[i] = Bitmap.createBitmap(spritesheet, i*width, 0, width, height);
}
animation.setFrames(image);
animation.setDelay(10);
startTime = System.nanoTime();
}
public void update()
{
if(!firstTym) {
// here i am updating speed of bird in x-axis.
//i want bird to cross the screen in 35 seconds
x += Constants.speed;
Log.e("speed = ","" + Constants.speed);
}
else
{
Random r = new Random();
r.nextInt(Constants.Width);
}
if(x > GamePanel.WIDTH){
Constants.missed ++;
x = 0;
}
if(y > GamePanel.HEIGHT)
{
x = 0;
}
}
public void draw(Canvas canvas) {
Random r = new Random();
if (x == 0 || firstTym) {
y = r.nextInt(GamePanel.HEIGHT - 150);
Constants.RAND = r.nextInt(1);
firstTym = false;
}
animation.update();
y += Constants.RAND;
rect = new Rect(x, y, x + 80, 72 + y);
setRect(rect);
setTag(tag);
canvas.drawBitmap(animation.getImage(), null, rect, null);
if (x < 0) {
canvas.drawBitmap(animation.getImage(), null, rect, null);
}
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
touchX = (int)event.getX();
touchY = (int)event.getY();
return true;
}
}
速度是距离随时间的变化。如果我在 2 秒内移动 10 米,那么我将以每秒 10 除以 2 米的速度移动,即每秒 5 米。我们可以写成s = D / t
,其中s
是速度,D
是距离,t
是时间。这样我们就可以安排它,以便我们可以根据其他两个来定义任何组件。
因此我们得到
s = D / t; // get the speed in term of distance and time
t = D / s; // get the time in term of distance and speed
D = t * s; // get the distance in term of time and speed
你有以像素为单位的距离 D(即宽度)和以秒为单位的时间。启动小鸟飞行时需要获取系统时钟时间startTime
,当前时间timeNow
。您将需要鸟开始的 x
和 y
位置,以及鸟在时间中的 x 和 y 位置 xEnd
,yEnd
,以及你希望它花费的时间 time
一开始你需要设置你需要的变量。我不做 java(讨厌)所以不记得 class 来获取系统时间。只需在参考文档中查找即可。
// set up
time = 35; // how long to cross the screen
x = 0; // start pos
y = 100; //
xEnd = screenWidth; // end pos
yEnd = 100;
startTime = ?.now() // ? is whatever class you get the system time from
通过所有这些来获得小鸟的位置。
// each frame get the time in seconds
timeNow = ?;
if( timeNow - startTime < time) { // make sure time is not over
currentX = x + ((xEnd - x) / time) * (timeNow - startTime))
currentY = y + ((yEnd - y) / time) * (timeNow - startTime))
}else{
// All done
}
当timeNow - startTime > time
如果时间以毫秒或更小为单位,您需要通过除以将其转换为秒。即毫秒 time = timeInMillisecond / 1000;