所以我有我的Tile课程:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
public class Tile {
public static Tile[] tiles = new Tile[256];
public static Tile airTile = new AirTile(0);
public static Tile grassTile = new GrassTile(1);
public static Tile dirtTile = new DirtTile(2);
public static Tile rockTile = new RockTile(3);
//public static Tile anvilTile = new AnvilTile(50);
public static int w, h;
public static final int TILE_WIDTH = 64, TILE_HEIGHT = 64;
private BufferedImage texture;
protected final int id;
public Tile(BufferedImage texture, int id, int w, int h){
this.texture = texture;
this.id = id;
this.h = h;
this.w = w;
tiles[id] = this;
}
public void tick(){
}
public void render(Graphics g, int x, int y){
g.drawImage(texture, x, y, w, h, null);
}
public boolean isSolid(){
return false;
}
public int getId(){
return id;
}
public int getWidth(){
return w;
}
public int getHeight(){
return h;
}
}
这是一个DirtTile类的例子
import java.awt.image.BufferedImage;
public class DirtTile extends Tile{
public DirtTile(int id) {
super(Assets.dirt, id, 64, 64);
}
@Override
public boolean isSolid(){
return false;
}
}
正如你所看到的,我的DirtTile类正在为我的Tile类提供它的宽度和高度,但是我想尝试制作更宽的图块(128 x 64):
package com.zetcode;
import java.awt.image.BufferedImage;
public class AnvilTile extends Tile{
public AnvilTile(int id) {
super(Assets.anvil, id, 128, 64);
}
}
这样做可以将每个Tile设置为128px宽,我只希望AnvilTile类的宽度为128px,所以基本上我必须在我的Tile类中对Render方法进行更改,但是我不知道如何要做到这一点,任何建议将不胜感激。
答案 0 :(得分:1)
这是因为您的w
和h
字段是静态的,并且这些值在所有Tile
个实例中共享。因此,当您创建新的AnvilTile
对象时,对super
的调用会将所有实例中的w
和h
字段分别设置为128和64.
删除static
修饰符以获得所需结果。现在这些字段是实例变量,这意味着每个Tile
实例都有自己的w
和h
值。