j'ai bitmap se déplace à droite dans la toile je veux quand ce bitmap ferme à la bordure droite de l'écran à savoir: x Position < getWidth() avec certains faible valeur je veux traduire toile coordonnées de sorte que la toile elle-même se déplace également à côté du mouvement de l'image à l'intérieurandroid traduire les coordonnées de toile lorsque le bitmap en mouvement à l'intérieur se referme sur la bordure droite de l'écran?
un autre sens; je veux que le bitmap continue à se déplacer vers la droite de façon permanente et bien sûr quand il se ferme à la bordure droite de l'écran il disparaîtra bientôt ainsi je veux que la toile bouge avec moi pour rendre le bitmap toujours visible et je veux savoir comment pour définir la valeur de position x après traduire toile que
par exemple: quelque chose comme dans tous les jeux qui a un caractère se déplace vers la droite et l'écran se déplace également avec elle.
c'est le code qui trouve ici
http://www.edu4java.com/en/androidgame/androidgame3.html
et j'édita et maintenant le bitmap répète son mouvement quand il se ferme à la bordure droite de l'écran.
MyActivity.java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GameView(this));
}
et MyGameView (la classe principale de mon problème)
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) {}
}
}
}
une aide pour ce problème? – omar