【发布时间】:2015-09-07 23:44:53
【问题描述】:
我的位图在画布内向右移动 我想要这个位图靠近屏幕的右边框,即: x position
另一个意思; 我希望位图继续永久向右移动,当然当它靠近屏幕的右边框时它会很快消失,所以我希望画布本身与我一起移动以使位图始终可见 我想知道如何在翻译画布后设置x位置值
即:例如在所有游戏中,角色向右移动,屏幕也随之移动。
这是在这里找到的代码
http://www.edu4java.com/en/androidgame/androidgame3.html
我对其进行了编辑,现在位图在靠近屏幕右边框时重复其移动。
MyActivity.java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GameView(this));
}
和MyGameView(我的问题的主要类)
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class GameView extends SurfaceView {
private Bitmap bmp;
private SurfaceHolder holder;
private GameLoopThread gameLoopThread;
private int x = 0;
private int xSpeed = 2;
public GameView(Context context) {
super(context);
gameLoopThread = new GameLoopThread(this);
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
gameLoopThread.setRunning(false);
while (retry) {
try {
gameLoopThread.join();
retry = false;
} catch (InterruptedException e) {
}
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
gameLoopThread.setRunning(true);
gameLoopThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
}
});
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.attention);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(x==getWidth())
{
Log.e("cds","cdca");
canvas.translate(x, 0);
x=10;
}
else
{
x = x + xSpeed;
}
if(canvas!=null) {
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(bmp, x, 10, null);
}
}
}
GameLoopThread .java
import android.graphics.Canvas;
public class GameLoopThread extends Thread {
static final long FPS = 10;
private GameView view;
private boolean running = false;
public GameLoopThread(GameView view) {
this.view = view;
}
public void setRunning(boolean run) {
running = run;
}
@Override
public void run() {
long ticksPS = 1000 / FPS;
long startTime;
long sleepTime;
while (running) {
Canvas c = null;
startTime = System.currentTimeMillis();
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
sleepTime = ticksPS-(System.currentTimeMillis() - startTime);
try {
if (sleepTime > 0)
sleep(sleepTime);
else
sleep(10);
} catch (Exception e) {}
}
}
}
【问题讨论】:
-
对这个问题有什么帮助吗?
标签: android android-canvas game-loop