Javaspel programmering handledning - Flappy fågeln Redux (5 / 12 steg)
Steg 5: Spelare och hinder klasser
Eftersom vi börjar med skelettet av klasser, vi nu gå vidare till skriva klasserna spelare och hinder. Som standard, måste vi veta att dessa klasser tjänar ett grundläggande syfte: Ladda resurs bilden används av objektet, skala bilden till önskat mått, få och ange X- och Y-koordinater (övre vänstra hörnet av bilder, xLoc och yLoc) och få bredd och höjd av objektets bild.
Eftersom jag har redan slutfört detta projekt, jag kommer att släppa en spoiler på er alla: för kollision upptäckt, förklarade i ett senare steg, du behöver också en metod som returnerar en rektangel som omfattar objektet, samt en metod som returnerar objektets BufferedImage. Nu när du vet allt som behövs, ger jag dig den fullständiga koden för klasserna fågel, BottomPipe och TopPipe. Alla tre klasser är identiskt strukturerade, endast avviker i namnkonventioner.
När klasserna är första instansieras, skickas önskad bredd och höjd av bilderna till klasserna i konstruktören, som automatiskt kommer att skala bilden genom att skala-metoden. Slutligen, märker du det finns getWidth och getHeight metoder som innehåller ett try/catch block. Detta är att hjälpa till med att förhindra logik problem i TopClass.
Du kanske märker när du skapar BufferedImage objekt, den är skapad med ARGB typen. Detta bygger på viljan till en alfakanal som skall ingå. Du kommer att se varför i kollision upptäckt steg.
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.Image;
import java.awt.image.BufferedImage;
allmän klass fågel {
globala variabler
privat bild flappyBird;
privata int xLoc = 0, yLoc = 0;
/**
* Standardkonstruktör
*/
offentliga fågel (int initialWidth, int initialHeight) {
flappyBird = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("resources/blue_bird.png"));
scaleBird (initialWidth, initialHeight);
}
/**
-Metoden att skala fågel sprite till önskat mått
* bredd önskad bredd av flappy fågeln
* höjd önskad höjd av flappy fågeln
*/
public void scaleBird (int bredd, int höjd) {
flappyBird = flappyBird.getScaledInstance (bredd, höjd, Image.SCALE_SMOOTH);
}
/**
* Get-metod för objektet flappyBird.
* Bild
*/
offentliga bild getBird() {
återvända flappyBird;
}
/**
-Metoden att få bredden på objektet fågel
* int
*/
Public int getWidth() {
försök {
återvända flappyBird.getWidth(null);
}
fånga (undantag e) {
återvända -1;
}
}
/**
-Metoden att få höjden på objektet fågel
* int
*/
Public int getHeight() {
försök {
återvända flappyBird.getHeight(null);
}
fånga (undantag e) {
återvända -1;
}
}
/**
-Metoden att ställa in x plats för objektet fågel
* x
*/
public void setX(int x) {
xLoc = x;
}
/**
-Metoden att få x plats för objektet fågel
* int
*/
Public int getX() {
återvända xLoc;
}
/**
-Metoden att ställa in y plats för objektet fågel
* y
*/
public void apparater (int y) {
yLoc = y;
}
/**
-Metoden att få y placeringen av objektet fågel
* int
*/
Public int getY() {
återvända yLoc;
}
/**
* Metod används för att få en rektangel som anger fågelns bild
* Rektangel beskriver fågelns placering på skärmen
*/
offentliga rektangel getRectangle() {
avkastning (nya rektangel (xLoc, yLoc, flappyBird.getWidth(null), flappyBird.getHeight(null)));
}
/**
-Metoden att förvärva en BufferedImage som representerar fågelns bildobjekt
* Fågelns BufferedImage objekt
*/
offentliga BufferedImage getBI() {
BufferedImage bi = nya BufferedImage(flappyBird.getWidth(null), flappyBird.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.getGraphics();
g.drawImage (flappyBird, 0, 0, null);
g.Dispose();
returnera bi;
}
}
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.Image;
import java.awt.image.BufferedImage;
allmän klass BottomPipe {
globala variabler
privat bild bottomPipe;
privata int xLoc = 0, yLoc = 0;
/**
* Standardkonstruktör
*/
offentliga BottomPipe (int initialWidth, int initialHeight) {
bottomPipe = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("resources/tube_bottom.png"));
scaleBottomPipe (initialWidth, initialHeight);
}
/**
-Metoden att skala BottomPipe sprite till önskat mått
* bredd önskad bredd för BottomPipe
* höjd önskad höjd för BottomPipe
*/
public void scaleBottomPipe (int bredd, int höjd) {
bottomPipe = bottomPipe.getScaledInstance (bredd, höjd, Image.SCALE_SMOOTH);
}
/**
* Get-metod för objektet BottomPipe.
* Bild
*/
offentliga bild getPipe() {
återvända bottomPipe;
}
/**
-Metoden att få bredden på objektet BottomPipe
* int
*/
Public int getWidth() {
återvända bottomPipe.getWidth(null);
}
/**
-Metoden att få höjden på objektet BottomPipe
* int
*/
Public int getHeight() {
återvända bottomPipe.getHeight(null);
}
/**
-Metoden att ställa in x plats för objektet BottomPipe
* x
*/
public void setX(int x) {
xLoc = x;
}
/**
-Metoden att få x plats för objektet BottomPipe
* int
*/
Public int getX() {
återvända xLoc;
}
/**
-Metoden att ställa in y plats för objektet BottomPipe
* y
*/
public void apparater (int y) {
yLoc = y;
}
/**
-Metoden att få y placeringen av objektet BottomPipe
* int
*/
Public int getY() {
återvända yLoc;
}
/**
* Metod används för att få en rektangel som beskriver den BottomPipe bilden
* Rektangel beskriver den BottomPipe placering på skärmen
*/
offentliga rektangel getRectangle() {
avkastning (nya rektangel (xLoc, yLoc, bottomPipe.getWidth(null), bottomPipe.getHeight(null)));
}
/**
-Metoden att förvärva en BufferedImage som representerar den TopPipe bildobjekt
* TopPipe BufferedImage objekt
*/
offentliga BufferedImage getBI() {
BufferedImage bi = nya BufferedImage(bottomPipe.getWidth(null), bottomPipe.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.getGraphics();
g.drawImage (bottomPipe, 0, 0, null);
g.Dispose();
returnera bi;
}
}
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.Image;
import java.awt.image.BufferedImage;
allmän klass TopPipe {
globala variabler
privat bild topPipe;
privata int xLoc = 0, yLoc = 0;
/**
* Standardkonstruktör
*/
offentliga TopPipe (int initialWidth, int initialHeight) {
topPipe = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("resources/tube_top.png"));
scaleTopPipe (initialWidth, initialHeight);
}
/**
-Metoden att skala topPipe sprite till önskat mått
* bredd önskad bredd för topPipe
* höjd önskad höjd för topPipe
*/
public void scaleTopPipe (int bredd, int höjd) {
topPipe = topPipe.getScaledInstance (bredd, höjd, Image.SCALE_SMOOTH);
}
/**
* Get-metod för objektet TopPipe.
* Bild
*/
offentliga bild getPipe() {
återvända topPipe;
}
/**
-Metoden att få bredden på objektet TopPipe
* int
*/
Public int getWidth() {
återvända topPipe.getWidth(null);
}
/**
-Metoden att få höjden på objektet TopPipe
* int
*/
Public int getHeight() {
återvända topPipe.getHeight(null);
}
/**
-Metoden att ställa in x plats för objektet TopPipe
* x
*/
public void setX(int x) {
xLoc = x;
}
/**
-Metoden att få x plats för objektet TopPipe
* int
*/
Public int getX() {
återvända xLoc;
}
/**
-Metoden att ställa in y plats för objektet TopPipe
* y
*/
public void apparater (int y) {
yLoc = y;
}
/**
-Metoden att få y placeringen av objektet TopPipe
* int
*/
Public int getY() {
återvända yLoc;
}
/**
* Metod används för att få en rektangel som beskriver den TopPipe bilden
* Rektangel beskriver den TopPipe placering på skärmen
*/
offentliga rektangel getRectangle() {
avkastning (nya rektangel (xLoc, yLoc, topPipe.getWidth(null), topPipe.getHeight(null)));
}
/**
-Metoden att förvärva en BufferedImage som representerar den TopPipe bildobjekt
* TopPipe BufferedImage objekt
*/
offentliga BufferedImage getBI() {
BufferedImage bi = nya BufferedImage(topPipe.getWidth(null), topPipe.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.getGraphics();
g.drawImage (topPipe, 0, 0, null);
g.Dispose();
returnera bi;
}
}