gpt4 book ai didi

java - 项目 fatal error

转载 作者:行者123 更新时间:2023-12-01 15:39:36 25 4
gpt4 key购买 nike

我遇到了一个我自己无法解决的问题。之前一切都很好,但是当我决定在方法 doShoot(); 中添加用于拍摄项目的内容时,它就停止工作了。这里有一些代码玩家类

    package game.objectsmain;

import game.main.R;
import game.objects.animation.PlayerBullet;

import java.util.List;
import java.util.Random;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.view.MotionEvent;


public class Player extends GameObject {

public static final int P_DEF_SPEED = 3;
public static final int P_HIGH_SPEED = 6;

//......//


private static Random rand = new Random();


private List<PlayerBullet> bulletList;
private GunType gunType;
Context context;
Bitmap mBasic;
Bitmap mSpray;

public Player(Drawable image, int cordX, int cordY) {
super(image);
// TODO Auto-generated constructor stub
setXCoord(cordX);
setYCoord(cordY);
setSpeedX(P_DEF_SPEED);
setSpeedY(P_DEF_SPEED);
update();
mBasic = BitmapFactory.decodeResource(context.getResources(), R.drawable.bullet3);
mSpray = BitmapFactory.decodeResource(context.getResources(), R.drawable.spray);

}

//......//

public void doShoot()
{
//I ADDED THIS
if(gunType == GunType.BASIC)
{


PlayerBullet b = new PlayerBullet(mBasic, getXCoord(), getYCoord(), 15, 35, 3, 3, BulletDirection.CENTER);
bulletList.add(b);



}
if(gunType == GunType.SPRAY)
{

PlayerBullet b1 = new PlayerBullet(mSpray, getXCoord(), getYCoord(), 15, 15, 3, 3, BulletDirection.CENTER);
PlayerBullet b2 = new PlayerBullet(mSpray, getXCoord(), getYCoord(), 15, 15, 3, 3, BulletDirection.RIGHT);
PlayerBullet b3 = new PlayerBullet(mSpray, getXCoord(), getYCoord(), 15, 15, 3, 3, BulletDirection.LEFT);


bulletList.add(b1);
bulletList.add(b2);
bulletList.add(b3);



}//

}

//......//

public void draw(Canvas canvas)
{

mImage.draw(canvas);
//AND ADDED THIS
synchronized (bulletList) {
for (PlayerBullet bullet: bulletList) {

bullet.animate();
bullet.draw(canvas);
//bullet.animate();
}
}
}//BTW i tried to add this foreach path into doShoot() too it not helps





}

子弹类。但它确实有效

package game.objects.animation;


import game.objectsmain.BulletDirection;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;

public class PlayerBullet extends AnimatedObject{

private double mSpeedY;
private double mSpeedX;
private BulletDirection bulletDir;// direction here it's just enum looks like public enum BulletDirection{LEFT,RIGHT,CENTER}

public PlayerBullet(Bitmap bitmap, int x, int y, int width, int height, int fps,
int frameCount, BulletDirection dir) {
super(bitmap, x, y, width, height, fps, frameCount);
// TODO Auto-generated constructor stub
bulletDir = dir;//направление пули
setFramePeriod(5000/ fps);
setSpeeds();



}

public void draw(Canvas canvas) {
// where to draw the sprite
//setY(getY() - mSpeedY);
Rect destRect = new Rect(getX(), getY(), getX() + spriteWidth, getY() + spriteHeight);
canvas.drawBitmap(bitmap, sourceRect, destRect, null);

}

public void animate()//анимация движения
{
super.animate();
setY(getY() + (int)mSpeedY);
setX(getX() + (int)mSpeedX);
// checkBorders(rect);
}

private void setSpeeds()
{
if(bulletDir.equals(BulletDirection.CENTER))
{
mSpeedY = -10;
mSpeedX = 0;
}
else
{
mSpeedY = -8;
mSpeedX = 5;

if(bulletDir.equals(BulletDirection.LEFT))
mSpeedX = -1 * mSpeedX;
}

}

/*public void move()
{
xCoord = xCoord + xSpeed;
yCoord = yCoord + ySpeed;
this.resetBounds();
if(yCoord < (0 - width) || xCoord < 0-width || xCoord > screenWidth)
alive = false;

}*/

}

主线程类

package game.view;

import game.main.R;
import game.objects.animation.Explosion;
import game.objects.animation.PlayerBullet;
import game.objects.animation.ScrollingElement;
import game.objectsmain.BulletDirection;
import game.objectsmain.Player;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;

public class ViewManager extends Thread
{
private static final int FIELD_WIDTH = 480;
private static final int FIELD_HEIGHT = 800;
private static final int dist = 100;

public int touchedX, touchedY;

/** Область, на которой будем рисовать */
private SurfaceHolder mSurfaceHolder;

/** Состояние потока (выполняется или нет. Нужно, чтобы было удобнее прибивать поток, когда потребуется) */
private boolean mRunning;

/** Стили рисования */
private Paint mPaint;

/** The drawable to use as the background of the animation canvas */
private Bitmap mBackgroundImage;
private Bitmap mLinesImage;
private Bitmap mExplosionImage;
private Bitmap mBulletImage;
private Drawable mPlayerImage;

private ArrayList<ScrollingElement> mScrollEls = new ArrayList<ScrollingElement>();
private ArrayList<PlayerBullet> mBullets = new ArrayList<PlayerBullet>();
private ArrayList<Explosion> mBang = new ArrayList<Explosion>();
public Player mHero;

// desired fps
private final static int MAX_FPS = 50;
// maximum number of frames to be skipped
private final static int MAX_FRAME_SKIPS = 5;
// the frame period
private final static int FRAME_PERIOD = 1000 / MAX_FPS;

private Explosion mBoom;//объект класса взрыв

public ViewManager(SurfaceHolder surfaceHolder, Context context)
{
mSurfaceHolder = surfaceHolder;
mRunning = false;
Resources res = context.getResources();
mExplosionImage = BitmapFactory.decodeResource(res, R.drawable.explosion);
mBackgroundImage = BitmapFactory.decodeResource(res, R.drawable.bckgr1);
mLinesImage = BitmapFactory.decodeResource(res, R.drawable.lines3);
mPlayerImage = res.getDrawable(R.drawable.test);
mBulletImage = BitmapFactory.decodeResource(res, R.drawable.bullet3);
InitElements(res);
mHero = new Player(mPlayerImage, 240, 400);
mBoom = new Explosion(mExplosionImage, 200, 500, 64, 64, 7, 7);

}


/**
* Задание состояния потока
* @param running
*/
public void setRunning(boolean running)
{
mRunning = running;
}

public void run()
{
while (mRunning)
{
Canvas canvas = null;
try
{
// подготовка Canvas-а
canvas = mSurfaceHolder.lockCanvas();
synchronized (mSurfaceHolder)
{

mHero.update();
// собственно рисование

doDraw(canvas);
//mImage.draw(canvas);



}
}
catch (Exception e) { }
finally
{
if (canvas != null)
{
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}

public boolean gettouch = false;

private void doDraw(Canvas canvas) {

canvas.drawBitmap(mBackgroundImage, 0, 0, null);
//отрисовка анимации
//......//
mHero.draw(canvas);




}

}



//....//
}

LOGCAT 所说的

11-27 15:39:36.852: INFO/ActivityManager(58): Displayed activity game.main/game.mainmenu.MainMenuActivity: 2102 ms (total 2102 ms)
11-27 15:39:42.073: DEBUG/dalvikvm(124): GC_EXPLICIT freed 2866 objects / 133872 bytes in 140ms
11-27 15:39:47.113: DEBUG/dalvikvm(197): GC_EXPLICIT freed 117 objects / 5160 bytes in 144ms
11-27 15:39:52.133: DEBUG/dalvikvm(265): GC_EXPLICIT freed 765 objects / 55144 bytes in 138ms
11-27 15:39:52.383: INFO/ActivityManager(58): Starting activity: Intent { cmp=game.main/game.mainmenu.StartGame }
11-27 15:39:52.693: DEBUG/dalvikvm(303): GC_EXTERNAL_ALLOC freed 267 objects / 13328 bytes in 50ms
11-27 15:39:53.054: DEBUG/AndroidRuntime(303): Shutting down VM
11-27 15:39:53.054: WARN/dalvikvm(303): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): FATAL EXCEPTION: main
11-27 15:39:53.073: ERROR/AndroidRuntime(303): java.lang.RuntimeException: Unable to start activity ComponentInfo{game.main/game.mainmenu.StartGame}: java.lang.NullPointerException
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at android.os.Handler.dispatchMessage(Handler.java:99)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at android.os.Looper.loop(Looper.java:123)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at java.lang.reflect.Method.invokeNative(Native Method)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at java.lang.reflect.Method.invoke(Method.java:521)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at dalvik.system.NativeStart.main(Native Method)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): Caused by: java.lang.NullPointerException
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at game.objectsmain.Player.<init>(Player.java:45)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at game.view.ViewManager.<init>(ViewManager.java:73)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at game.view.ViewPanel.<init>(ViewPanel.java:24)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at game.mainmenu.StartGame.onCreate(StartGame.java:18)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-27 15:39:53.073: ERROR/AndroidRuntime(303): ... 11 more
11-27 15:39:53.093: WARN/ActivityManager(58): Force finishing activity game.main/game.mainmenu.StartGame
11-27 15:39:53.104: WARN/ActivityManager(58): Force finishing activity game.main/game.mainmenu.MainMenuActivity
11-27 15:39:53.373: INFO/ARMAssembler(58): generated scanline__00000077:03515104_00000000_00000000 [ 33 ipp] (47 ins) at [0x2d2d78:0x2d2e34] in 463339 ns
11-27 15:39:53.677: WARN/ActivityManager(58): Activity pause timeout for HistoryRecord{44ec3010 game.main/game.mainmenu.StartGame}
11-27 15:40:04.141: WARN/ActivityManager(58): Activity destroy timeout for HistoryRecord{44f01440 game.main/game.mainmenu.MainMenuActivity}
11-27 15:40:04.143: WARN/ActivityManager(58): Activity destroy timeout for HistoryRecord{44ec3010 game.main/game.mainmenu.StartGame}
11-27 15:40:14.553: DEBUG/AndroidRuntime(312): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
11-27 15:40:14.553: DEBUG/AndroidRuntime(312): CheckJNI is ON
11-27 15:40:14.703: DEBUG/AndroidRuntime(312): --- registering native functions ---

最佳答案

问题是您尝试将项目符号添加到未初始化的 bulletList 中,从而生成 NullPointerException。您必须将以下代码添加到构造函数中:

 bulletList = new List<PlayerBullet>();

关于java - 项目 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8286720/

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