[英]How do I Render Tiles at different sizes?
所以我有我的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类提供了宽度和高度,但是我想尝试制作一个更宽的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方法进行更改,但是我不知道该怎么做建议将不胜感激。
这是因为您的w
和h
字段是静态的,并且这些值在所有Tile
实例之间共享。 因此,当您创建新的AnvilTile
对象时,对super
的调用AnvilTile
所有实例中的w
和h
字段分别设置为128和64。
删除static
修改器以达到所需的结果。 现在,这些字段是实例变量,这意味着每个Tile
实例都有自己的w
和h
值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.