所以我正在做一個Android遊戲的作業resit。這不是我的第一款應用,但它是我的第一款遊戲。我從來沒有像這位專家那麼熟練,坦率地說,這對我來說很難。我希望這裏有人能幫忙。Android中的遊戲得分(java)
我其實有兩個問題要添加一個分數(我真心希望它不會太多)。事情是,我想在TextView中顯示它。當Sprite「bad」被擊中時,我希望得分增加1.
我的第一個問題是,即使我沒有在其中放入任何其他文本,我的活動中也不會顯示該TextView。我試圖把它放在LinearLayout中,或者改變它的位置的一些參數,但我沒有在互聯網上找到任何其他有用的東西。
我的第二個問題是分數,即使我看不到它,可能不起作用。我找到了一些幫助,說要把JPanel或JLabel,但我不認爲這是我所需要的。我嘗試了一個簡單的東西,我只是將它作爲一個int,增加了isHit,然後將其顯示在頁面上。但它沒有顯示任何內容,而且在程序寫入代碼之前甚至無法做任何事情之前,該程序就會遭遇崩潰的壞習慣。
我實際上並不知道哪個其他頁面會有用,所以這裏是我的GameView.java,如果有其他可能需要的,請告訴我。
package com.example.proprietaire.assignmentna2;
import com.example.proprietaire.assignmentna2.R;
import com.example.proprietaire.assignmentna2.Sprite;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class GameView extends SurfaceView implements Runnable {
private SurfaceHolder holder;
private int x = 0, xSpeed = 1;
private Bitmap bmp;
Thread thread = null;
volatile boolean running = false;
static final long FPS = 10;
private long lastClick;
private List<Sprite> sprites = new ArrayList<Sprite>();
private List<Sprite> sprites2 = new ArrayList<Sprite>();
private List<TempSprite> temps = new ArrayList<TempSprite>();
private Bitmap bmpSmoke;
int score = 0;
public GameView(Context context) {
super(context);
thread = new Thread(this);
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
running = false;
while (retry) {
try {
thread.join();
retry = false;
} catch (InterruptedException e) {
}
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
createSprites();
running = true;
thread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
}
});
bmpSmoke = BitmapFactory.decodeResource(getResources(), R.drawable.smoke);
}
private void createSprites() {
sprites.add(createSprite(R.drawable.bad));
sprites2.add(createSprite(R.drawable.good));
}
private Sprite createSprite(int resource) {
bmp = BitmapFactory.decodeResource(getResources(), resource);
return new Sprite(this, bmp);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
for (int i = temps.size() - 1; i>= 0; i--) {
temps.get(i).onDraw(canvas);
}
for (Sprite sprite : sprites) {
sprite.onDraw(canvas);
}
for (Sprite sprite : sprites2) {
sprite.onDraw(canvas);
}
}
@Override
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) {
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (System.currentTimeMillis() - lastClick> 300) {
lastClick = System.currentTimeMillis();
float x = event.getX();
float y = event.getY();
synchronized (getHolder()) {
for (int i = sprites.size() - 1; i >= 0; i--) {
Sprite sprite = sprites.get(i);
if (sprite.isHit(event.getX(), event.getY())) {
sprites.remove(sprite);
temps.add(new TempSprite(temps, this, x, y, bmpSmoke));
sprites.add(createSprite(R.drawable.bad));
sprites.add(createSprite(R.drawable.bad));
sprites2.add(createSprite(R.drawable.good));
score++;
break;
}
//TextView textView = (TextView)findViewById(R.id.textView);
//String s = "" + score;
//textView.setText((new Integer(score)).toString(Integer.parseInt(s)));
}
}
}
return true;
}
}
這裏是GameActivity.java
package com.example.proprietaire.assignmentna2;
import android.app.Activity;
import android.os.Bundle;
public class GameActivity extends Activity {
GameView GV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GV = new GameView(this);
setContentView(GV);
}
}
爲遊戲中的XML是沒有任何特殊的東西添加了一個簡單的TextView。 預先感謝您。
第一眼看起來似乎沒問題,但是因爲這整個類基本上仍然是一個視圖,所以您需要將您的textview添加到SurfaceView旁邊,而不是在其內部。你能告訴我你將類GameView(SurfaceView)添加到主佈局的類嗎? –
你的意思是我的GameActivity? (我今天輸了)我將編輯主帖。 – poibhw
嗯,我不知道你給你的「主」類命名。我指的是啓動「GameView」的類,並將該實例添加到某個「主」佈局,以使其在屏幕上可見=) –