- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了一个我自己无法解决的问题。之前一切都很好,但是当我决定在方法 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/
reqwest v0.9 将 serde v1.0 作为依赖项,因此实现 converting serde_json errors into reqwest error . 在我的代码中,我使用 se
我有这个代码: let file = FileStorage { // ... }; file.write("Test", bytes.as_ref()) .map_err(|e| Mu
我只是尝试用angular-cli创建一个新项目,然后运行服务器,但是它停止并显示一条有趣的消息:Error: No errors。 我以这种方式更新了(希望有帮助):npm uninstall -g
我从我的 javascript 发送交易 Metamask 打开传输对话框 我确定 i get an error message in metamask (inpage.js:1 MetaMask -
这个问题在这里已经有了答案: How do you define custom `Error` types in Rust? (3 个答案) How to get a reference to a
我想知道两者之间有什么大的区别 if let error = error{} vs if error != nil?或者只是人们的不同之处,比如他们如何用代码表达自己? 例如,如果我使用这段代码: u
当我尝试发送超过 50KB 的图像时,我在 Blazor 服务器应用程序上收到以下错误消息 Error: Connection disconnected with error 'Error: Serv
我有一个error-page指令,它将所有异常重定向到错误显示页面 我的web.xml: [...] java.lang.Exception /vi
我有这样的对象: address: { "phone" : 888, "value" : 12 } 在 WHERE 中我需要通过 address.value 查找对象,但是在 SQL 中有函数
每次我尝试编译我的代码时,我都会遇到大量错误。这不是我的代码的问题,因为它在另一台计算机上工作得很好。我尝试重新安装和修复,但这没有帮助。这是整个错误消息: 1>------ Build starte
在我的代码的类部分,如果我写一个错误,则在不应该的情况下,将有几行报告为错误。我将'| error'放在可以从错误中恢复的良好/安全位置,但是我认为它没有使用它。也许它试图在某个地方恢复中间表情? 有
我遇到了 csv 输入文件整体读取故障的问题,我可以通过在 read_csv 函数中添加 "error_bad_lines=False" 来删除这些问题来解决这个问题。 但是我需要报告这些造成问题的文
在 Spring 中,验证后我们在 controller 中得到一个 BindingResult 对象。 很简单,如果我收到验证错误,我想重新显示我的表单,并在每个受影响的字段上方显示错误消息。 因此
我不知道出了什么问题,因为我用 Java 编程了大约一年,从来没有遇到过这个错误。在一分钟前在 Eclipse 中编译和运行工作,现在我得到这个错误: #A fatal error has been
SELECT to_char(messages. TIME, 'YYYY/MM/DD') AS FullDate, to_char(messages. TIME, 'MM/DD
我收到这些错误: AnonymousPath\Anonymized.vb : error BC30037: Character is not valid. AnonymousPath\Anonymiz
我刚刚安装了 gridengine 并在执行 qstat 时出现错误: error: commlib error: got select error (Connection refused) erro
嗨,我正在学习 PHP,我从 CRUD 系统开始,我在 Windows 上安装了 WAMP 服务器,当我运行它时,我收到以下错误消息。 SCREAM: Error suppression ignore
我刚刚开始一个新项目,我正在学习核心数据教程,可以找到:https://www.youtube.com/watch?v=zZJpsszfTHM 我似乎无法弄清楚为什么会抛出此错误。我有一个名为“Exp
当我使用 Jenkins 运行新构建时,出现以下错误: "FilePathY\XXX.cpp : fatal error C1853: 'FilePathZ\XXX.pch' precompiled
我是一名优秀的程序员,十分优秀!