您好我正在尝试编写一个循环遍历数组列表的方法,以检查是否已触摸数组列表中的精灵,如果是,则删除它们。我已经写过这种方法但是当我点击精灵时,它们会停止并振动然后游戏崩溃。 Logcat在下面提供
的onTouchEvent
public class GameView extends SurfaceView implements SurfaceHolder.Callback {
/* Member (state) fields */
private GameLoopThread gameLoopThread;
private Paint paint; //Reference a paint object
/** The drawable to use as the background of the animation canvas */
private Bitmap mBackgroundImage;
private Sprite sprite;
int arraySize;
private int hitCount;
private ArrayList<Sprite> spritesArrayList;
private GameView gameView;
int numberofsprites = 5;
int finalScore;
private boolean gameOver;
/* For the countdown timer */
private long startTime ; //Timer to count down from
private final long interval = 1 * 1000; //1 sec interval
private CountDownTimer countDownTimer; //Reference to class
private boolean timerRunning = false;
private String displayTime; //To display time on the screen
private Bitmap spritebmp;
public GameView(Context context) {
super(context);
// Focus must be on GameView so that events can be handled.
this.setFocusable(true);
// For intercepting events on the surface.
this.getHolder().addCallback(this);
mBackgroundImage = BitmapFactory.decodeResource(this.getResources(),
R.drawable.background2);
spritesArrayList= new ArrayList<Sprite>(numberofsprites);
}
public void surfaceCreated(SurfaceHolder holder) {
mBackgroundImage = Bitmap.createScaledBitmap(mBackgroundImage, getWidth(), getHeight(), true);
ResetGame();
gameLoopThread = new GameLoopThread(this.getHolder(), this);
gameLoopThread.running = true;
gameLoopThread.start();
}
//To initialise/reset game
private void ResetGame(){
gameOver = false;
hitCount = 0;
/* Set paint details */
paint = new Paint();
paint.setColor(Color.WHITE);
paint.setTextSize(20);
//Set timer
startTime = 60;//Start at 10s to count down
//Create new object - convert startTime to milliseconds
countDownTimer=new MyCountDownTimer(startTime*1000,interval);
countDownTimer.start();//Start it running
timerRunning = true;
for (int i = 0; i < numberofsprites; i++)
{
sprite = new Sprite(this);
spritesArrayList.add(new Sprite(this));
}
}
//This class updates and manages the assets prior to drawing - called from the Thread
public void update(){
sprite = new Sprite(this);
if (gameOver != true) {
for (int i = 0; i < numberofsprites; i++)
{
sprite = spritesArrayList.get(i);
sprite.update();
}
}
}
/**
* To draw the game to the screen
* This is called from Thread, so synchronisation can be done
*/
public void doDraw(Canvas canvas) {
Paint textPaint = new Paint();
canvas.drawBitmap(mBackgroundImage, 0, 0, null);
//Draw all the objects on the canvas
canvas.drawText("The Game ",5,25, paint);
canvas.drawText("Score: " + hitCount, 5, 50, paint);
canvas.drawText("Time: " +displayTime, 5, 75, paint);
//Loop for sprite creation
for (int i = 0; i < spritesArrayList.size(); i++)
{
sprite = spritesArrayList.get(i);
sprite.draw(canvas);
}
if (gameOver == true)
{
canvas.drawText("Final Score: "+finalScore, 5,100, paint);
int width = this.getMeasuredWidth()/2;
int height = this.getMeasuredHeight()/2;
textPaint.setTextAlign(Align.CENTER);
canvas.drawText("GAME OVER - PRESS BACK BUTTON TO RETURN", width, height, textPaint);
}
}
public int getHitCount()
{
return hitCount;
}
//To be used if we need to find where screen was touched
public boolean onTouchEvent(MotionEvent event) {
if (!gameOver)
{
Iterator<Sprite> i = spritesArrayList.iterator();
while (i.hasNext()) {
sprite = i.next();
if (sprite.wasItTouched(event.getX(), event.getY())) {
i.remove();
sprite = new Sprite(this);
sprite.update();
hitCount++;
}
}
}
return true;
}
public void surfaceDestroyed(SurfaceHolder holder) {
gameLoopThread.running = false;
// Shut down the game loop thread cleanly.
boolean retry = true;
while(retry) {
try {
gameLoopThread.join();
retry = false;
} catch (InterruptedException e) {}
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
private class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
public void onFinish() {
displayTime = "Times Over!";
finalScore = hitCount;
gameOver = true;
timerRunning = false;
countDownTimer.cancel();
}
public void onTick(long millisUntilFinished) {
displayTime = " " + millisUntilFinished / 1000;
}
}//End of MyCountDownTimer
public void updateEasy()
{
this.gameView=gameView;
numberofsprites = 20;
}
public void updateMedium()
{
this.gameView=gameView;
numberofsprites = 15;
}
public void updateHard()
{
this.gameView=gameView;
numberofsprites = 5;
}
}
logcat的
05-06 14:36:41.613: E/AndroidRuntime(1639): FATAL EXCEPTION: main
05-06 14:36:41.613: E/AndroidRuntime(1639): Process: cct.mad.lab, PID: 1639
05-06 14:36:41.613: E/AndroidRuntime(1639): java.lang.IllegalStateException
05-06 14:36:41.613: E/AndroidRuntime(1639): at java.util.ArrayList$ArrayListIterator.remove(ArrayList.java:589)
05-06 14:36:41.613: E/AndroidRuntime(1639): at cct.mad.lab.GameView.onTouchEvent(GameView.java:166)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.View.dispatchTouchEvent(View.java:7706)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
05-06 14:36:41.613: E/AndroidRuntime(1639): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
05-06 14:36:41.613: E/AndroidRuntime(1639): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.app.Activity.dispatchTouchEvent(Activity.java:2458)
05-06 14:36:41.613: E/AndroidRuntime(1639): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.View.dispatchPointerEvent(View.java:7886)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3954)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3833)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5602)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5582)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5553)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5682)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5655)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5701)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.Choreographer.doFrame(Choreographer.java:542)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.os.Handler.handleCallback(Handler.java:733)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.os.Handler.dispatchMessage(Handler.java:95)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.os.Looper.loop(Looper.java:136)
05-06 14:36:41.613: E/AndroidRuntime(1639): at android.app.ActivityThread.main(ActivityThread.java:5017)
05-06 14:36:41.613: E/AndroidRuntime(1639): at java.lang.reflect.Method.invokeNative(Native Method)
05-06 14:36:41.613: E/AndroidRuntime(1639): at java.lang.reflect.Method.invoke(Method.java:515)
05-06 14:36:41.613: E/AndroidRuntime(1639): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-06 14:36:41.613: E/AndroidRuntime(1639): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-06 14:36:41.613: E/AndroidRuntime(1639): at dalvik.system.NativeStart.main(Native Method)
05-06 14:36:41.633: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:41.633: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:41.633: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:41.633: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:41.633: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:41.703: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:41.703: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:41.703: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:41.713: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:41.713: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:41.763: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:41.763: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:41.763: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:41.783: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:41.783: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:41.823: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:41.823: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:41.823: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:41.823: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:41.823: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:41.863: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:41.863: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:41.873: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:41.873: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:41.873: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:41.903: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:41.903: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:41.903: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:41.903: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:41.913: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:41.933: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:41.933: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:41.933: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:41.933: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:41.943: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:41.953: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:41.953: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:41.953: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:41.953: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:41.953: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:41.963: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:41.963: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:41.963: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:41.973: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:41.973: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:41.993: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:41.993: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.023: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.023: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.043: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.063: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.063: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.073: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.073: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.073: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.073: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.083: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.083: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.083: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.083: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.113: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.113: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.113: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.113: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.123: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.143: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.143: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.143: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.143: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.153: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.193: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.243: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.243: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.243: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.253: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.253: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.263: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.263: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.263: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.263: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.323: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.323: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.333: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.333: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.333: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.523: D/dalvikvm(1639): GC_FOR_ALLOC freed 618K, 66% free 4491K/13092K, paused 159ms, total 163ms
05-06 14:36:42.553: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.553: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.553: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.553: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.553: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.583: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.583: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.583: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.593: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.593: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.623: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.623: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.623: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.623: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.633: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.653: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.653: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.683: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.683: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.693: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.733: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.733: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.733: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.733: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.733: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.783: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.783: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.783: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.783: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.793: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.843: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.853: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.853: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.853: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.853: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.883: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.883: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.883: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.883: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.893: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:42.933: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:42.933: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:42.933: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:42.933: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:42.943: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:43.003: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:43.003: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:43.003: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:43.013: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:43.013: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:43.073: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:43.073: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:43.073: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:43.073: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:43.113: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:43.143: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:43.153: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:43.153: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:43.153: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:43.153: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:43.273: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:43.273: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:43.273: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:43.273: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:43.273: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:43.313: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:43.313: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:43.323: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:43.463: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
05-06 14:36:43.493: W/System.err(1639): at cct.mad.lab.GameLoopThread.run(GameLoopThread.java:50)
05-06 14:36:43.493: W/System.err(1639): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
05-06 14:36:43.503: W/System.err(1639): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-06 14:36:43.503: W/System.err(1639): at java.util.ArrayList.get(ArrayList.java:308)
05-06 14:36:43.503: W/System.err(1639): at cct.mad.lab.GameView.update(GameView.java:106)
答案 0 :(得分:2)
从ArrayList中删除元素也会改变ArrayList本身中的元素数量。您有一个较少的项目,但您仍然在列表上循环,因为它仍然具有相同数量的项目。改为使用迭代器:E.g
Iterator<Sprite> i = spritesArrayList.iterator();
while (i.hasNext()) {
sprite = i.next();
if (sprite.wasItTouched(event.getX(), event.getY())) {
i.remove();
sprite = new Sprite(this);
hitCount++;
}
}
答案 1 :(得分:0)
你应该替换这些:
public void update(){
sprite = new Sprite(this);
if (gameOver != true) {
for (int i = 0; i < numberofsprites; i++)
{
sprite = spritesArrayList.get(i);
sprite.update();
}
}
}
与
public void update(){
sprite = new Sprite(this);
if (gameOver != true) {
for (int i = 0; i < spritesArrayList.size(); i++)
{
sprite = spritesArrayList.get(i);
sprite.update();
}
}
}
和
Iterator<Sprite> i = spritesArrayList.iterator();
while (i.hasNext()) {
sprite = i.next();
if (sprite.wasItTouched(event.getX(), event.getY())) {
i.remove();
sprite = new Sprite(this);
sprite.update();
hitCount++;
}
}
与
for(int i = 0; i < spritesArrayList.size(); i++) {
sprite = spritesArrayList.get(i);
if (sprite.wasItTouched(event.getX(), event.getY())) {
spritesArrayList.remove(i--);
sprite = new Sprite(this);
sprite.update();
hitCount++;
}
}
这样,您将只管理实际位于数组列表中的对象。