This site requires JavaScript, please enable it in your browser!
Greenfoot back
Chelrieo
Chelrieo wrote ...

2019/3/8

Having trouble with the jump machenic and sound using it

1
2
danpost danpost

2019/3/21

#
Chelrieo wrote...
okay okay. i got it now. << Code Omitted >>
Do you? You create a TileEngine object here. However, no tiles being added into the world here. Maybe it is the TileEngine class that is wanted.
Chelrieo Chelrieo

2019/3/21

#
danpost wrote...
Chelrieo wrote...
okay okay. i got it now. << Code Omitted >>
Do you? You create a TileEngine object here. However, no tiles being added into the world here. Maybe it is the TileEngine class that is wanted.
Right away sir
public class TileEngine {

    public static int TILE_WIDTH;
    public static int TILE_HEIGHT;
    public static int SCREEN_HEIGHT;
    public static int SCREEN_WIDTH;
    public static int MAP_WIDTH;
    public static int MAP_HEIGHT;

    private World world;
    private int[][] map;
    private Tile[][] generateMap;
    private TileFactory tileFactory;

    /**
     * Constuctor of the TileEngine
     *
     * @param world A World class or a extend of it.
     * @param tileWidth The width of the tile used in the TileFactory and
     * calculations
     * @param tileHeight The heigth of the tile used in the TileFactory and
     * calculations
     */
    public TileEngine(World world, int tileWidth, int tileHeight) {
        this.world = world;
        TILE_WIDTH = tileWidth;
        TILE_HEIGHT = tileHeight;
        SCREEN_WIDTH = world.getWidth();
        SCREEN_HEIGHT = world.getHeight();
        this.tileFactory = new TileFactory();
    }

    /**
     * Constuctor of the TileEngine
     *
     * @param world A World class or a extend of it.
     * @param tileWidth The width of the tile used in the TileFactory and
     * calculations
     * @param tileHeight The heigth of the tile used in the TileFactory and
     * calculations
     * @param map A tilemap with numbers
     */
    public TileEngine(World world, int tileWidth, int tileHeight, int[][] map) {
        this(world, tileWidth, tileHeight);
        this.setMap(map);
    }

    /**
     * The setMap method used to set a map. This method also clears the previous
     * map and generates a new one.
     *
     * @param map
     */
    public void setMap(int[][] map) {
        this.clearTilesWorld();
        this.map = map;
        MAP_HEIGHT = this.map.length;
        MAP_WIDTH = this.map[0].length;
        this.generateMap = new Tile[MAP_HEIGHT][MAP_WIDTH];
        this.generateWorld();
    }

    /**
     * The setTileFactory sets a tilefactory. You can use this if you want to
     * create you own tilefacory and use it in the class.
     *
     * @param tf A Tilefactory or extend of it.
     */
    public void setTileFactory(TileFactory tf) {
        this.tileFactory = tf;
    }

    /**
     * Removes al the tiles from the world.
     */
    public void clearTilesWorld() {
        List<Tile> removeObjects = this.world.getObjects(Tile.class);
        this.world.removeObjects(removeObjects);
        this.map = null;
        this.generateMap = null;
        MAP_HEIGHT = 0;
        MAP_WIDTH = 0;
    }

    /**
     * Creates the tile world based on the TileFactory and the map icons.
     */
    public void generateWorld() {
        int mapID = 0;
        for (int y = 0; y < MAP_HEIGHT; y++) {
            for (int x = 0; x < MAP_WIDTH; x++) {
                // Nummer ophalen in de int array
                mapID++;
                int mapIcon = this.map[y][x];
                if (mapIcon == -1) {
                    continue;
                }
                // Als de mapIcon -1 is dan wordt de code hieronder overgeslagen
                // Dus er wordt geen tile aangemaakt. -1 is dus geen tile;
                Tile createdTile = this.tileFactory.createTile(mapIcon);

                createdTile.setMapID(mapID);
                createdTile.setMapIcon(mapIcon);

                addTileAt(createdTile, x, y);
            }
        }
    }

    /**
     * Adds a tile on the colom and row. Calculation is based on TILE_WIDTH and
     * TILE_HEIGHT
     *
     * @param tile The Tile
     * @param colom The colom where the tile exist in the map
     * @param row The row where the tile exist in the map
     */
    public void addTileAt(Tile tile, int colom, int row) {
        // De X en Y positie zitten het midden van de Actor. 
        // De tilemap genereerd een wereld gebaseerd op dat de X en Y
        // positie links boven in zitten. Vandaar de we de helft van de 
        // breedte en hoogte optellen zodat de X en Y links boven zit voor 
        // het toevoegen van het object.
        this.world.addObject(tile, (colom * TILE_WIDTH) + TILE_WIDTH / 2, (row * TILE_HEIGHT) + TILE_HEIGHT / 2);
        // Toevoegen aan onze lokale array. Makkelijk om de tile op te halen
        // op basis van een x en y positie van de map
        this.generateMap[row][colom] = tile;
        tile.setColom(colom);
        tile.setRow(row);
    }

    /**
     * Retrieves a tile at the location based on colom and row in the map
     *
     * @param colom
     * @param row
     * @return The tile at the location colom and row. Returns null if it cannot
     * find a tile.
     */
    public Tile getTileAt(int colom, int row) {
        if (row < 0 || row >= MAP_HEIGHT || colom < 0 || colom >= MAP_WIDTH) {
            return null;
        }
        return this.generateMap[row][colom];
    }

    /**
     * Retrieves a tile based on a x and y position in the world
     *
     * @param x X-position in the world
     * @param y Y-position in the world
     * @return The tile at the location colom and row. Returns null if it cannot
     * find a tile.
     */
    public Tile getTileAtXY(int x, int y) {
        int col = getColumn(x);
        int row = getRow(y);

        Tile tile = getTileAt(col, row);
        return tile;
    }

    /**
     * Removes tile at the given colom and row
     *
     * @param colom
     * @param row
     * @return true if the tile has successfully been removed
     */
    public boolean removeTileAt(int colom, int row) {
        if (row < 0 || row >= MAP_HEIGHT || colom < 0 || colom >= MAP_WIDTH) {
            return false;
        }
        Tile tile = this.generateMap[row][colom];
        if (tile != null) {
            this.world.removeObject(tile);
            this.generateMap[row][colom] = null;
            return true;
        }
        return false;
    }

    /**
     * Removes tile at the given x and y position
     *
     * @param x X-position in the world
     * @param y Y-position in the world
     * @return true if the tile has successfully been removed
     */
    public boolean removeTileAtXY(int x, int y) {
        int col = getColumn(x);
        int row = getRow(y);

        return removeTileAt(col, row);
    }

    /**
     * Removes the tile based on a tile
     *
     * @param tile Tile from the tilemap
     * @return true if the tile has successfully been removed
     */
    public boolean removeTile(Tile tile) {
        int colom = tile.getColom();
        int row = tile.getRow();
        if (colom != -1 && row != -1) {
            return this.removeTileAt(colom, row);
        }
        return false;
    }

    /**
     * This methode checks if a tile on a x and y position in the world is solid
     * or not.
     *
     * @param x X-position in the world
     * @param y Y-position in the world
     * @return Tile at location is solid
     */
    public boolean checkTileSolid(int x, int y) {
        Tile tile = getTileAtXY(x, y);
        if (tile != null && tile.isSolid) {
            return true;
        }
        return false;
    }

    /**
     * This methode returns a colom based on a x position.
     *
     * @param x
     * @return the colom
     */
    public int getColumn(int x) {
        return (int) Math.floor(x / TILE_WIDTH);
    }

    /**
     * This methode returns a row based on a y position.
     *
     * @param y
     * @return the row
     */
    public int getRow(int y) {
        return (int) Math.floor(y / TILE_HEIGHT);
    }

    /**
     * This methode returns a x position based on the colom
     *
     * @param col
     * @return The x position
     */
    public int getX(int col) {
        return col * TILE_WIDTH;
    }

    /**
     * This methode returns a y position based on the row
     *
     * @param row
     * @return The y position
     */
    public int getY(int row) {
        return row * TILE_HEIGHT;
    }

}
danpost danpost

2019/3/21

#
Try a number like 0.8 for gravity and remove lines 56 thru 58 in the Hero class.
You need to login to post a reply.
1
2