2016-06-17 12 views
0

Ich mache ein Projekt über ein Vogel-Tötungsspiel. Alles funktioniert gut, aber ich möchte, dass mein Vogel den Bildschirm in 35 Sekunden für jeden gegebenen mobilen Bildschirm überquert. Und nach jeder 20 Sekunden seine Zeit auf 31 reduziert. Was wird die mathematische Formel (für die Geschwindigkeit) sein, um den Bildschirm in 35 Sekunden zu überqueren? Zurzeit aktualisiere ich den X-Achsen-Wert in update Methode und erstelle Rechteck für die Vogel-Sprites.Rechenzeit der Simulation in 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

Was wird die mathematische Formel sein, um die Übergangszeit zu berechnen? Diese Aussage ist ein wenig mehrdeutig. Weil du sagst, dass du deinen Vogel beschleunigen willst, um den Bildschirm in 35 Sekunden zu überqueren, für welche Zeit willst du dann rechnen? –

+1

Ich denke, Sie möchten die Geschwindigkeit Ihres Vogels berechnen. Mit welcher Geschwindigkeit sollte es sich in 35 Sekunden bewegen, um einen beliebigen Bildschirm zu überqueren –

Antwort

0

Geschwindigkeit ist die Entfernung im Laufe der Zeit. Wenn ich 10 Meter in 2 Sekunden bewege, dann bewege ich mich um 10 Teile mal 2 Meter pro Sekunde, also 5 Meter pro Sekunde. Wir können es als s = D/t schreiben, wo s Geschwindigkeit ist, Entfernung ist, und t ist Zeit. Damit können wir es so arrangieren, dass wir jede der Komponenten in Bezug auf die anderen beiden definieren können.

so erhalten wir

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 

Sie haben den Abstand D in Pixel (dh die Breite) und die Zeit, in Sekunden. Sie müssen die Systemuhrzeit startTime bekommen, wenn Sie den Vogelflug starten, die aktuelle Zeit timeNow. Sie müssen die x und y Position, wo der Vogel beginnt, und die x- und y-Position xEnd, yEnd von wo der Vogel in der Zeit sein wird, und die Zeit, die Sie Sie time

Zu Beginn nehmen wollen, müssen um die benötigten Variablen einzurichten. Ich mache kein Java (yuck), kann mich also nicht an die Klasse erinnern, um die Systemzeit zu bekommen. Schauen Sie einfach in den Referenzdokumenten nach.

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

Mit all dem, um die Position des Vogels zu bekommen.

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

Sie wissen, es ist alles vorbei, wenn timeNow - startTime > time

Wenn die Zeit in Millisekunden oder kleiner ist, müssen Sie es auf Sekunden konvertieren, indem man. Ie für Millisekunden time = timeInMillisecond/1000;