我正在尝试开发一个坦克游戏,所以我需要建立两个不同的位图坦克。我已经创建了一个名为Tank.java的Java类,在这里我创建了我的坦克,但问题是我需要创建两个不同的坦克模型,但是在我的类中,我只能创建一个特定类型的坦克。
public class Tank {
private int x,y;
int width, height;
Bitmap tank1
Tank(int screenY, Resources res){
tank1 = BitmapFactory.decodeResource(res, R.drawable.azul_tanque);
width = tank1.getWidth();
height = tank1.getHeight();
width /=4;
height/=4;
width *= (int)screenRatioX;
height *= (int)screenRatioY;
tank1 = Bitmap.createScaledBitmap(tank1,width,height,false);
setY(screenY / 2);
}
}
您可以在这里看到这个类,但是问题是我从另一个类调用这个类,它在画布中绘制这个对象。
public class GameView extends SurfaceView implements Runnable {
private Thread thread;
private Boolean isPlaying;
Paint paint;
public static float screenRatioX, screenRatioY;
private Tank tank;
private Tank tank2;
public GameView(Context context, int screenX, int screenY) {
super(context);
background = new Background(screenX,screenY,getResources());
paint = new Paint();
screenRatioX = 2340f / screenX;
screenRatioY= 1080f / screenY;
tank = new Tank(screenY,getResources());
tank2 = new Tank(screenY,getResources());
}
@Override
public void run() {
while(isPlaying){
update();
draw();
sleep();
}
}
private void draw(){
if(getHolder().getSurface().isValid()){
Canvas canvas = getHolder().lockCanvas();
canvas.drawBitmap(background.background,background.x,background.y,paint);
tank.setX((int)(64 * screenRatioX));
tank2.setX((int)(2000 * screenRatioX));
canvas.drawBitmap(tank.getTank(),tank.getX(),tank.getY(),paint);
canvas.drawBitmap(tank2.getTank(),tank2.getX(),tank2.getY(),paint);
getHolder().unlockCanvasAndPost(canvas);
}
}
在这个类中,我调用坦克的构造函数,但我不能选择我想要使用的可绘制性。我试图创建另一个具有以下语义的坦克构造函数:
坦克(int screenY,Resources res,可绘制myTank).
在GameView类中,我实例化如下:
getResources.getDrawable(R.drawable.mytank));坦克=新坦克(screenY,getResources,screenY)
但是,当我在新坦克的构造函数上构造坦克时,它不起作用,因为方法:
BitmapFactory.decodeResource R.drawable.azul_tanque BitmapFactory.decodeResource(res,myTank)给出了一个错误,因为需要像第二个参数一样的int,但是在旧的构造函数中,我使用了R.drawable.azul_tanque,我认为第二个参数需要可绘制。
因此,任何人都可以帮助我,我如何编码新的构造函数来创建一个新的坦克,在GameView类中选择可绘制的。
非常感谢你们的时间各位。
Pd:如果您看到这里没有出现的方法,是因为我删除了它们,但是现在,这段代码在我的屏幕上给我画了两个相同的容器。
发布于 2021-08-22 05:23:13
如果您不想使用位图作为参数,您可以执行一个简单的If else操作,并传递一个开关变量。如下所示:
构造者:
Tank(int screenY, Resources res, int switcher) {
if(switcher == 1)
tank1 = BitmapFactory.decodeResource(res, R.drawable.azul_tanque);
else
tank1 = BitmapFactory.decodeResource(res, R.drawable.second_tank);
GameView:
tank = new Tank(screenY,getResources(), 1);
tank2 = new Tank(screenY,getResources(), 0);
发布于 2021-08-22 10:30:51
可以在构造函数中传递可绘制资源id。
Tank(int screenY, Resources res, int resourceId){
tank1 = BitmapFactory.decodeResource(res, resourceId);
width = tank1.getWidth();
height = tank1.getHeight();
width /=4;
height/=4;
width *= (int)screenRatioX;
height *= (int)screenRatioY;
tank1 = Bitmap.createScaledBitmap(tank1,width,height,false);
setY(screenY / 2);
}
现在你可以传递坦克的任何图像了。
https://stackoverflow.com/questions/68881595
复制相似问题