2016-06-17 17 views
0

私は鳥を殺すゲームのプロジェクトを行っています。すべてうまく動作しますが、私は鳥が35秒の任意のモバイル画面で画面を横切ることを望みます。そして毎晩20秒の時間が31に短縮されます。35秒で画面を通過する数式(速度)は何ですか?現在、更新という方法でx軸の値を更新し、bird-spritesの四角形を作成しています。Javaでのシミュレーション時間の計算

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; 
} 
} 
+0

交差時間を計算する数式は何ですか?この文はあいまいです。あなたは35秒でスクリーンを横切るようにあなたの鳥を加速したいと言っていますし、それからあなたが計算したい時間は? –

+1

私はあなたの鳥の速度を計算したいと思う。どんなスピードであれ35秒でどんなサイズの画面にも移動する必要があります –

答えて

0

速度は時間の経過と共に変化します。私が2秒間に10メートル移動すると、毎秒5メートルである2メートルごとに10の除算で移動しています。 s = D/tと書くことができます。sは速度、Dは距離、tは時間です。それを使って、他の2つのコンポーネントのいずれかを定義できるように、それを配置することができます。

は、このように我々はあなたが秒単位でピクセル単位の距離D(すなわち幅)との時間を、持っている

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 

を取得します。あなたが鳥の飛行を開始するときに、システム時計の時刻 startTimeを取得する必要があります、現在の時間 timeNow。あなたが必要開始時に鳥が始まり、xとyの位置 xEnd、鳥が時間になりますどこの yEnd、そしてあなたはそれが time

を取りたい時xy位置が必要になります必要な変数を設定します。私はjava(yuck)をしないので、システム時間を得るためにクラスを覚えていない。参照用ドキュメントで参照してください。

// 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;