Java 我的Android自定义精灵类的问题
我目前正在为android的java设计一个基本的sprite类,因为我不想使用2d引擎,而且出于某种原因Google没有提供任何sprite API 无论如何,我的问题是关于我设计的课程。我有一个Sprite类,它获取位图并将其转换为Sprite。然后,当用户创建一个新的SpriteContainer时,这个sprite可以传递给我创建的自定义视图 我的DynamicScreetContainer代码如下:Java 我的Android自定义精灵类的问题,java,android,sprite,Java,Android,Sprite,我目前正在为android的java设计一个基本的sprite类,因为我不想使用2d引擎,而且出于某种原因Google没有提供任何sprite API 无论如何,我的问题是关于我设计的课程。我有一个Sprite类,它获取位图并将其转换为Sprite。然后,当用户创建一个新的SpriteContainer时,这个sprite可以传递给我创建的自定义视图 我的DynamicScreetContainer代码如下: package com.me.spriteGraphics; import andr
package com.me.spriteGraphics;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class DynamicSpriteContainer extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holder;
public int x, y;
private Bitmap b;
public Sprite sprite;
private Canvas c = new Canvas();
private boolean bool = false;
public DynamicSpriteContainer(Context context, Sprite spriteImage) {
//public ImageView(Context context) {
super(context);
//get sprite
b = spriteImage.getBitmap();
//set holder
holder = getHolder();
holder.addCallback(this);
//set position
x = y = 0;
update();
}
public void surfaceCreated(SurfaceHolder holder) {
c = holder.lockCanvas();
c.drawARGB(255, 150, 150, 10);
//set up bitmap image
c.drawBitmap(b, x, y, null);
holder.unlockCanvasAndPost(c);
update();
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
}
private void update() {
//this code will alter the character in the way the developer specifies (per frame)
Thread repeat = new Thread( new Runnable() {
public void run() {
try {
//move sprite in constant motion
while (bool) {
//redraw
c = holder.lockCanvas();
c.drawARGB(255, 150, 150, 10);
//set up bitmap image
c.drawBitmap(b, x, y, null);
holder.unlockCanvasAndPost(c);
}
} catch (Error e) {
e.printStackTrace();
bool = false;
}
}
});
repeat.start();
}
public void setX(int x) {
//notice how this same code above has the holder, the holder is recognized above, not here.
c = holder.lockCanvas();
c.drawARGB(255, 150, 150, 10);
//set up bitmap image
c.drawBitmap(b, x, y, null);
holder.unlockCanvasAndPost(c);
}
//set the info on pause, resume, stop...
//this data is for error stopping, so the app can resume and stop without passing an error to the user!
public void passInfo(boolean isPaused, boolean isResumed, boolean isStopped) {
if (isPaused && sprite.auto) {
bool = false;
}
if (isResumed && sprite.auto) {
bool = true;
}
if (isStopped && sprite.auto) {
bool = false;
}
}
}
抱歉,代码摘录太长了
主要的问题是在update函数中,holder是可以识别的,但是在setX中,它不是
如何让setX识别支架
提前谢谢你 你到底是什么意思?您的IDE未解析holder?它仅在SetXt中的holder上提供NullPointerExection。如果画布未解锁,lockCanvas方法将返回null。当您调用setX时,更新方法可能正在使用画布。谢谢您的评论。我尝试过使用setX,更新函数被注释掉了。它仍然给出同样的回答