Java Android非常基础的游戏开发
有人能帮我写这个简单的代码吗? 为什么圆圈移动不平稳? 怎么了Java Android非常基础的游戏开发,java,android,Java,Android,有人能帮我写这个简单的代码吗? 为什么圆圈移动不平稳? 怎么了 package chaseme; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Point; import android
package chaseme;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
public class ChaseMe extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new SampleView(this));
}
private class SampleView extends SurfaceView implements SurfaceHolder.Callback, Runnable {
private Point point;
private Thread thread;
private SurfaceHolder holder;
private Paint _rect;
private Paint _circle;
private boolean running;
private int WIDTH;
private int HEIGHT;
private float radius = 20;
public SampleView(Context context) {
super(context);
point = new Point(20, 20);
_rect = new Paint();
_rect.setColor(Color.BLACK);
_circle = new Paint();
_circle.setColor(Color.BLUE);
holder = this.getHolder();
holder.addCallback(this);
thread = new Thread(this);
}
private void updateModel() {
if(point.x > WIDTH - radius) {
point.x = 20;
}
if(point.y > HEIGHT - radius) {
point.y = 20;
}
point.x++;
point.y++;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
@Override
public void surfaceCreated(SurfaceHolder holder) {
WIDTH = getWidth();
HEIGHT = getHeight();
this.setRunning(true);
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
this.setRunning(false);
while (retry) {
try {
thread.join();
retry = false;
}
catch (InterruptedException e) {}
}
}
private void setRunning(boolean b) {
running = b;
}
@Override
public void run() {
while(running) {
Canvas c = null;
updateModel();
try {
c = holder.lockCanvas(null);
// synchronized (holder) {
render(c);
// }
}
catch(Exception e) {
Log.e("main", e.getMessage());
}
finally {
if(c!=null) {
holder.unlockCanvasAndPost(c);
}
}
}
}
private void render(Canvas c) {
c.drawRect(0, 0, WIDTH, HEIGHT, _rect);
c.drawCircle(point.x, point.y, radius , _circle);
//c.save();
//c.restore();
}
}
}
您不能像当前那样调用point.x++。您需要计算相对于运行时间和屏幕大小的移动 步骤1:在每一帧,通过执行以下操作计算自上一帧以来经过的时间
long now = System.currentTimeMillis();
elapsed = (now - mLastTime);
totalTimeElapsed += elapsed;
然后在你的主循环结束时
mLastTime = now;
第二步。获取屏幕比率:
screenWidth = MyClass.this.getWidth();
screenHeight = MyClass.this.getHeight();
float a = screenWidth;
float b = screenHeight;
screenRatioX = a/WIDTH_OF_YOUR_PHONE;
screenRatioY = b/HEIGTH_OF_YOUR_PHONE;
第三步。例如,如果要从右向左移动圆,现在可以开始制作动画:
spriteX1 = (int) ((spriteX1 + (VELOCITY*screenRatioX*elapsed))+0.5);
spriteX2 = spriteX1 + spriteWidth;
从速度2.0开始,然后从那里开始调整
祝你好运 我认为要使物体平稳移动,应该使用触控事件的手势侦听器功能 下面的链接可能对您有所帮助 一,。http://mobile.tutsplus.com/tutorials/android/android-gesture/
2.http://stackoverflow.com/questions/937313/android-basic-gesture-detection根据我的意愿对代码进行了测试,运行非常顺利 我建议在真实设备上测试此类项目,模拟器可能会非常不可预测且速度缓慢,这也取决于您的cpu 没什么大不了的,但你可以用
canvas.drawColor(Color.BLACK);
而不是绘制矩形。如果在“渲染”控制台中打印一些内容,帧速率是否良好?我想知道你的应用程序是否运行得太快,因为你从不要求线程在动画帧之间休眠。我知道问题是什么,是模拟器运行得非常慢,我运行了一个测试来查看fps,它从大约20降到了10。设备只是安卓上的真实世界测试。这也是调试应用程序最快的方法。我使用模拟器只测试我的设备无法测试的内容(分辨率、sdk版本…)。但通常我会在设备上测试我的代码。