gpt4 book ai didi

java - Java for Android 中的多个移动 Sprite

转载 作者:行者123 更新时间:2023-11-29 21:45:39 25 4
gpt4 key购买 nike

我目前正在 Eclipse 中使用 Java 为 Android 制作游戏。我在屏幕上一次移动多个 Sprite 时遇到问题。下面是一些代码,向您展示我到目前为止所做的事情。

这是游戏中线程的运行方法。它调用 onDraw 方法在屏幕上绘制 Sprite 。它们都在一个扩展 SurfaceView 并实现 Runnable 的类中。

public void run() {
long ticksPS = 1000 / FPS;
long startTime;
long sleepTime;
while (running) {
Canvas c = null;
startTime = System.currentTimeMillis();
try {
c = getHolder().lockCanvas();
synchronized (getHolder()) {
onDraw(c);

}
} finally {
if (c != null) {
getHolder().unlockCanvasAndPost(c);
}

}
sleepTime = ticksPS-(System.currentTimeMillis() - startTime);
try {
if (sleepTime > 0)
Thread.sleep(sleepTime);
else
Thread.sleep(10);
} catch (Exception e) {}
}

}

这里说的是onDraw方法。左下方和右下方有 2 个品格按钮,就像在节奏游戏中一样。而我想要做的是创建一个将出现在顶部并向下移动的“badfret”。其中一些代码是从其他程序拼凑而成的,一些是我自己的。

@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.CYAN);
badguy = true;

if(badguy == true){
if(switch_sides = true){
badfret1.move(canvas,30,40);
badfret1.update(canvas);
}
if(switch_sides = false){
badfret2.move(canvas,500,40);
badfret2.update(canvas);
}
}



fret1.update(canvas);
fret2.update(canvas);
}

这是来自 badfretSprite 类的代码,我认为它最适合这个问题。 badfretSprite 类继承 self 制作的更高级别的 Sprite 类。

Bitmap bmp;
int xSpeed = 0;
int ySpeed = 5;

public badfretSprite(GameView gv, int x1, int y1) {
super(gv, x1, y1);
this.bmp = gv.getFret();
}

public void move(Canvas canvas,int xpos,int ypos) {
x = xpos;
y = ypos;
x+=xSpeed;
y+=ySpeed;
canvas.drawBitmap(bmp, x,y, null);
}

所以目前只有一个 Sprite 在顶部创建并且没有移动,我设法让它移动但只有一个这样做了。

请询问是否有任何其他方法或代码 fragment 您希望看到。

public void update(Canvas canvas) {
move(canvas,xSpeed,ySpeed);
}

最佳答案

没有必要更新 badFretSprites。

另外你应该真正分开你的绘图和更新逻辑,游戏循环应该是这样的

    synchronized (getHolder()) {
update();
onDraw(c);
}


update(){
for every object
object.update()
}

onDraw(){
for every object
object.draw()
}

所以你应该只在 update 方法中更新位置,只在 draw 方法中绘制,一旦你的应用变得更复杂,它会更容易管理、添加和调试。

关于java - Java for Android 中的多个移动 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com