Stap 2: De textuur klasse
Voordat springen in de berekeningen voor het vinden van hoe het scherm eruit moet zien 'm I gonna nemen een omweg en het opzetten van een klasse van textuur. Texturen worden toegepast op de diverse muren in het milieu, en komt uit afbeeldingen die in de projectmap opgeslagen. Ik heb 4 texturen vond ik online dat ik in dit project gebruiken zal ook in de beelden. U kunt wat texturen die u wilt gebruiken. Voor het gebruik van deze structuren adviseer ik dat ze in een map in het projectbestand. Te doen ga dit naar de projectmap (in eclipse dit bevindt zich in de map van de werkruimte). Nadat je naar de projectmap maakt een nieuwe map met de titel "res" of iets. Plaats de texturen in deze map. U kunt de texturen ergens anders plaatsen, dit is gewoon waar bewaar ik mijn texturen. Zodra dit klaar is kunnen we beginnen met het schrijven van de code om de texturen bruikbaar.
De invoer voor de klasse zijn:
import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO;
De klasse-header en de variabelen ervan zal als volgt uitzien:
public class Texture { public int[] pixels; private String loc; public final int SIZE;
De pixels van de matrix wordt gebruikt om te houden van de gegevens voor alle pixels in het beeld van de textuur. Loc wordt gebruikt om aan te geven op de computer waar het afbeeldingsbestand voor de textuur kan worden gevonden. GROOTTE is hoe groot de textuur is aan de ene kant (een beeld van 64 x 64 zou hebben grootte 64), en alle structuren zullen perfect vierkant.
De constructor zal het initialiseren van de loc en grootte variabelen en ik roep de methode voor het laden van de afbeeldingsgegevens in pixels. Het kijkt als dit:
public Texture(String location, int size) { loc = location; SIZE = size; pixels = new int[SIZE * SIZE]; load(); }
Nu alles wat overblijft voor de textuur klasse is het toevoegen van een load methode om gegevens van beelden en bewaar ze in een array van pixelgegevens. Deze methode zal er zo uitzien:
private void load() { try { BufferedImage image = ImageIO.read(new File(loc)); int w = image.getWidth(); int h = image.getHeight(); image.getRGB(0, 0, w, h, pixels, 0, w); } catch (IOException e) { e.printStackTrace(); } }
De methode load werkt door het lezen van de gegevens uit het bestand dat loc wijst op en het schrijven van deze gegevens naar een gebufferde beeld. De gegevens voor elke pixel wordt dan genomen uit de gebufferde afbeelding en opgeslagen in pixels.
Op dit punt wordt de textuur klasse gedaan, dus ik ben van plan te gaan en een paar texturen, die zal worden gebruikt in het definitieve programma definiëren. Om dit te doen zetten dit
public static Texture wood = new Texture("res/wood.png", 64); public static Texture brick = new Texture("res/redbrick.png", 64); public static Texture bluestone = new Texture("res/bluestone.png", 64); public static Texture stone = new Texture("res/greystone.png", 64);
tussen de lijn die "public class textuur" en "openbare int [] pixels".
Deze texturen toegankelijk maken voor de rest van het programma let's ga je gang en geef ze aan de Game klasse. Om dit te doen zullen we een ArrayList te houden van alle van de texturen, en zullen we de texturen aan deze ArrayList toevoegen. Het zetten van de volgende lijn van code met de variabelen in de buurt van de bovenkant van de klasse ArrayList aanmaken
public ArrayList<Texture> textures;
Deze ArrayList moet worden geïnitialiseerd in de constructor en de texturen moeten ook worden toegevoegd aan het in de constructor. Voeg de volgende beetje van code in de constructor:
textures = new ArrayList<Texture>(); textures.add(Texture.wood); textures.add(Texture.brick); textures.add(Texture.bluestone); textures.add(Texture.stone);
En nu texturen zijn goed om te gaan!