繁体   English   中英

如何渲染不同大小的图块?

[英]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方法进行更改,但是我不知道该怎么做建议将不胜感激。

这是因为您的wh字段是静态的,并且这些值在所有Tile实例之间共享。 因此,当您创建新的AnvilTile对象时,对super的调用AnvilTile所有实例中的wh字段分别设置为128和64。

删除static修改器以达到所需的结果。 现在,这些字段是实例变量,这意味着每个Tile实例都有自己的wh值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM