Java - Slick - 点击时填充矩形

时间:2013-05-10 23:21:40

标签: java graphics grid fill slick2d

我想在最近的第10个像素上填充一个50x50大小的矩形。每当执行此代码时,它会向我显示syso中的数字,因此我知道正确计算了位置。但是,矩形不会出现。我有一个网格绘制但正方形没有正确绘制。我究竟做错了什么?我没有从错误或类似的东西中得到任何Stack Traces ......

if(gc.getInput().isMousePressed(0)){
    float f1 = (float) Math.ceil(gc.getInput().getMouseX() / 16 * 10);
    float f2 = (float) Math.ceil(gc.getInput().getMouseY() / 12 * 10);
    gc.getGraphics().fillRect(f1, f2, 50, 50);
    System.out.println("Filled: " + f1 + "x" + f2);
}

1 个答案:

答案 0 :(得分:0)

这是我的解决方案,基于您的代码:

package game;

import entity.Block;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
import world.Camera;
import world.World;

import java.util.ArrayList;
import java.util.List;

public class TestState extends BasicGameState {
    /**
     * This variable sets
     * the gird size, and the block's
     * size.
     */
    private final int size = 50;

    /**
     * This list contains/stores the blocks
     * who going to be rendered.
     */
    private final List<Block> blocks = new ArrayList<>();

    @Override
    public int getID() {
        return 0;
    }

    @Override
    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
    }

    @Override
    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
        /**
         * DRAW THE GRID
         *
         * This can be confusing
         * for the first look, but its logical.
         */
        g.setColor(Color.white);

        for (int i = 0; i < 50; i++) {
            float y = i * size;
            float x = 0;
            g.drawLine(x, y, gc.getWidth(), y);

            for (int i2 = 0; i2 < 50; i2++) {
                float x2 = i2 * size;
                g.drawLine(x2, y, x2, gc.getHeight());
            }
        }

        // DRAW EACH BLOCKS (this is a for-each loop)
        for (Block block : blocks) {
            block.render(gc, g);
        }
    }

    @Override
    public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
        // ADD NEW BLOCK IF MOUSE PRESSED
        if (gc.getInput().isMouseButtonDown(0)) {

            // get the x and y positions
            float x = (float) Math.ceil(gc.getInput().getMouseX() / size * size);
            float y = (float) Math.ceil(gc.getInput().getMouseY() / size * size);

            /**
             * The block class has a
             * special constructor because
             * I built it for my game.
             * You should build your own.
             *
             * The block is *size by *size sized :D
             * I mean the *size is the variable.
             * Ohh, and it's uses the x & y positions.
             */
            blocks.add(new Block(new World(new Camera()), new Camera(), new Rectangle(x, y, size, size)));
        }
    }
}

输出: The output