2.5D Plane in Slick2D is curved for some reason

79 Views Asked by At

I'll readily admit that this code is weird and a pretty unorthodox way of creating anything 2.5D, however if anyone can see what's going on I would appreciate help.

The result of my code is as shown: Strangely curved plane

I do of course want a totally flat plane, however I'm unsure as to why it curves like so. The code is shown below if anyone has any answers:

public static int width = 640; public static int height = 480;

private Image image;
private Graphics imageG;

private int mapWidth = 20, mapHeight = 15;

private int[] map;

private float x, y;

public Game(String title)
{
    super(title);
}

@Override
public void render(GameContainer gc, Graphics g) throws SlickException
{
    imageG.setBackground(Color.black);
    imageG.clear();

    for (int y = 0; y < mapHeight; y++)
        for (int x = 0; x < mapWidth; x++)
        {
            switch (map[x + y * (mapWidth)])
            {
            case 0:
                imageG.setColor(Color.green);
                break;
            case 1:
                imageG.setColor(Color.yellow);
                break;
            }

            imageG.fillRect(x * 32, y * 32, 32, 32);
        }

    imageG.flush();

    Image frustrum;

    for (int i = 0; i < 240; i++)
    {
        frustrum = image.getSubImage((int) (x - i), (int) (y - i), 32 + 2 * i, 1);
        frustrum.draw(0, height - 1 - i, width, 1);
        //g.drawImage(frustrum, x - i, y - i);
    }

    //g.setColor(Color.blue);
    //g.fillRect(x, y, 32, 32);
}

@Override
public void init(GameContainer gc) throws SlickException
{
    try
    {
        image = new Image(width, height);
        imageG = image.getGraphics();
    } catch (SlickException e)
    {
        e.printStackTrace();
    }

    /*map = new int[]
        {
            0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
            1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
            0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
            1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
            0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
            1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
            0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
            1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
            0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
            1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
            0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
            1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
            0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
            1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
            0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
        };*/

    map = new int[mapWidth * mapHeight];
    Random random = new Random();
    for (int i = 0; i < map.length; i++)
    {
        map[i] = random.nextInt(2);
    }

    x = 10 * 32;
    y = 7 * 32;

}

@Override
public void update(GameContainer gc, int delta) throws SlickException
{
    if (gc.getInput().isKeyDown(Input.KEY_W)) y--;
    if (gc.getInput().isKeyDown(Input.KEY_S)) y++;
    if (gc.getInput().isKeyDown(Input.KEY_A)) x--;
    if (gc.getInput().isKeyDown(Input.KEY_D)) x++;
}

public static void main(String[] args)
{
    try
    {
        AppGameContainer appgc = new AppGameContainer(new Game("2.5D Game"));
        appgc.setDisplayMode(width, height, false);
        appgc.start();
    } catch (SlickException e)
    {
        e.printStackTrace();
    }
}

This is my first post, so sorry if things look a bit messy. I'm sure I'll get used to it eventually...

0

There are 0 best solutions below