Att göra en grundläggande 3D-motor i Java (1 / 5 steg)

Steg 1: Den nationella klassen

Det första som måste göras är en huvudklass. Huvudklass hanterar visar bilder till användaren, uppmanar andra klasser för att räkna om vad ska visas till spelaren och uppdatera positionen för kameran.

För den här klassen kommer att importen vara:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import java.util.ArrayList;
import javax.swing.JFrame;

Klassen och dess variabler kommer att se ut så här:

allmän klass spelet sträcker sig JFrame genomför Runnable {
privata statisk sista långa serialVersionUID = 1L;
Public int mapWidth = 15.
Public int mapHeight = 15.
privat tråd tråd;
privata boolean kör;
privat BufferedImage bild;
Public int [] pixlar.
offentliga statisk int [] [] karta =
{
{1,1,1,1,1,1,1,1,2,2,2,2,2,2,2},
{1,0,0,0,0,0,0,0,2,0,0,0,0,0,2},
{1,0,3,3,3,3,3,0,0,0,0,0,0,0,2},
{1,0,3,0,0,0,3,0,2,0,0,0,0,0,2},
{1,0,3,0,0,0,3,0,2,2,2,0,2,2,2},
{1,0,3,0,0,0,3,0,2,0,0,0,0,0,2},
{1,0,3,3,0,3,3,0,2,0,0,0,0,0,2},
{1,0,0,0,0,0,0,0,2,0,0,0,0,0,2},
{1,1,1,1,1,1,1,1,4,4,4,0,4,4,4},
{1,0,0,0,0,0,1,4,0,0,0,0,0,0,4},
{1,0,0,0,0,0,1,4,0,0,0,0,0,0,4},
{1,0,0,2,0,0,1,4,0,3,3,3,3,0,4},
{1,0,0,0,0,0,1,4,0,3,3,3,3,0,4},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
{1,1,1,1,1,1,1,4,4,4,4,4,4,4,4}
};

Observera att kartan kan konfigureras om till vad du vill, vad jag har här är bara ett urval. Siffrorna på kartan representerar vilken typ av vägg kommer att vara på den positionen. En 0 representerar tomt utrymme medan andra nummer representerar en fast vägg och den struktur som går med det. BufferedImage är vad som visas för användaren, och pixlar är en matris med alla pixlar i bilden. Övriga variabler brukar verkligen visas igen, de används bara för att få grafik och program fungerar.

Konstruktören kommer att se ut så här nu:

offentliga Game() {
tråden = nya Thread(this);
bild = nya BufferedImage (640, 480, BufferedImage.TYPE_INT_RGB);
pixlar = ((DataBufferInt)image.getRaster().getDataBuffer()).getData();
setSize (640, 480);
setResizable(false);
setTitle ("3D-motor");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBackground(Color.black);
setLocationRelativeTo(null);
setVisible(true);
Start();
}

Merparten av detta är bara initiering av variablerna som klass och ramen. Koden efter "pixlar =" ansluter pixlar och bild så att helst datavärdena i pixlar ändras motsvarande ändringar visas på bilden när den visas för användaren.

Start och stopp är enkel och används för att se till att programmet säkert börjar och slutar.

privata synkroniseras void start() {
kör = sant;
Thread.start();
}
offentliga synkroniseras void stop() {
köra = false;
försök {
Thread.Join();
} fånga (InterruptedException e) {
e.printStackTrace();
}
}

De sista två metoder som måste vara i klassen spel är render och köra metoder. Metoden render ut så här:

public void render() {
BufferStrategy bs = getBufferStrategy();
IF(BS == null) {
createBufferStrategy(3);
hemkomst.
}
Graphics g = bs.getDrawGraphics();
g.drawImage (bild, 0, 0, image.getWidth(), image.getHeight(), null);
BS.show();
}

En buffert strategi används vid rendering så att uppdateringar är smidigare. Sammantaget hjälper använder en buffert strategi bara spelet utseendet bättre när du kör. För att faktiskt dra bilden till skärmen ett graphics-objekt hämtas från strategin som buffert och används för att rita vår image.

Kör metoden är mycket viktigt eftersom det hanterar hur ofta olika delar av programmet uppdateras. För att göra detta använder vissa kod att hålla reda på när 1/60 av en andra har passerat, och när den har skärmen och kameran är uppdaterade. Detta förbättrar hur smidigt programmet körs. Kör metoden ser ut så här:

public void run() {
lång lastTime = System.nanoTime();
slutliga dubbel ns = 1000000000.0 / 60.0;//60 gånger per sekund
dubbla delta = 0;
requestFocus();
While(Running) {
länge nu = System.nanoTime();
delta = delta + ((now-lastTime) / ns);
lastTime = nu;
medan (delta > = 1) //Make säker uppdatering sker endast 60 gånger per sekund
{
hanterar all logik begränsad tid

delta--;
}
Render (), //displays till dess att skärmen obegränsad
}
}

När alla dessa metoder, konstruktörer och variabler är sedan är det enda kvar för att göra i klassen spelet just nu att lägga till en huvudsakliga metod. Den huvudsakliga metoden är mycket lätt allt du behöver göra är:

offentliga statisk void main (String [] args) {
Spel spel = nya Game();
}

Och nu huvudklass görs för tillfället! Om du kör programmet bör nu en svart skärm dyka upp.

Se Steg
Relaterade Ämnen

Att göra en grundläggande privat server i Minecraft

Vill ha ett enkelt sätt att spela Minecraft med dina vänner utan alla troll och irriterande människor på publika servrar? Här är det enklaste sättet att göra en grundläggande lösenordsskyddad server! Detta görs på en mac. Jag tror det är liknande til...

Att göra en grundläggande pappersflygplan

Här är hur man gör en grundläggande pappersflygplan.Steg 1: Få papperUtforma det så det är liggande orienteringSteg 2: Vik papperet på mittenSteg 3: VikSteg 4: Vik ner högra hörnet för att centrera fodrar?Steg 5: Vik ner vänstra hörnet för att centre...

Att göra en grundläggande Roux

göra en grundläggande Roux kan vara en av de enklaste matlagning tekniker som du kan lära dig. Dock kan det användas i på så många sätt. Det är startmotorn för vita frukost sås, till cheesy såser för mac-n-ost och gå över grönsaker, det är också anvä...

Introduktion till ShapeCrete (att göra en grundläggande leaf print)

Detta instructable beskriver att göra en leaf avtryck med ShapeCrete och måla den. Främst, kommer vi att diskutera vad ShapeCrete är och vad man ska göra med detta awesome material.I ett nötskal, är här vad vi kommer att täcka:1. vi kommer att gå öve...

Hur du gör Windows 7 snabbare genom att ändra några grundläggande inställningar - se upp för några knep

Att köra din arbetsdrift systemet snabbare än någonsin tidigare - här är några enkla tips att göra det - inte Glöm att starta om datorn när du har ändrat alla dessa inställningar att göra förändringar effektivt....

Att göra en grundläggande HTML webbplats

vissa människor tror att att göra en hemsida är svårt. De är felSteg 1: där? Du kan prod is html webbplatser med något så enkelt som anteckningar eller text editSteg 2: Se webbplats Html. TypSteg 3: Lägga till innehåll Nu du kan lägga till punkterna...

Android-utveckling: Att skapa en grundläggande kalkylator

Välkommen till en rolig tutorial på att göra en grundläggande kalkylator på en Android-applikation. I denna tutorial guidar jag dig genom dataöverföring all nödvändig programvara, utforma layouten för ansökan, kodning till att få det att fungera orde...

Hur man knyter en grundläggande siffran åtta Knut & att följa genom

en siffra åtta med en bight är en berömd knut i bergsklättring världen. När klättring, skulle du använda en siffra åtta med en bight (ett bett är en loop) att knyta dig själv till din sele för att hindra dig från att falla. Du uppnå knyta en siffra å...

Grundläggande remskiva mekanismer

Från tank slitbanor till cykel redskap till fiske linjer, som remskivor används överallt när det gäller mekaniska transmissioner. Alla typer av remskiva mekanismerna består av någon form av flexibelt bälte (kedja, kabel, rep, etc.) vrida runt omkrets...

Grundläggande raden efter Robot med Arduino

09/07/2015Det har varit några år eftersom vi Ursprungligen postat denna grundläggande linje följande Robot med Arduino handledning, och det verkar så många människor tyckte att det bra att vi ska skicka en uppdatering som löper nuvarande Arduino bibl...

Grundläggande elektronik

att komma igång med grundläggande elektronik är lättare än du kanske tror. Detta Instructable kommer förhoppningsvis att avmystifiera grunderna i elektronik så att alla med intresse i att bygga kretsar kan slå i marken kör. Detta är en snabb översikt...

Grundläggande elmotor Masco G37

Användningen av detta instructable gör att vem som helst att skapa en liten motor. Genom att använda vissa grundläggande material, kan du bygga en motor som snurrar. Den använder de grundläggande principerna för en motor, spolen bildar en elektromagn...

Grundläggande mänskliga skanna med Kinect & ReconstructMe konsolen

detta instructable kommer att täcka den grundläggande processen för att göra en 3D skanning av en mänsklig kropp med hjälp av XBOX 360 Kinect, en Windows-dator och programvara ReconstructMe (konsolen upplaga).ErkännandeNicolas Brunet gjorde en underb...

Justerbar utarbetandet bord med grundläggande verktyg och material

jag har spelat runt med tanken på att få mig en liten utarbetandet bord, som jag hittar den justerbar vinkeln ganska bekväm för ett antal olika saker: Rita, läsa, skriva, arbetar med tangentbord/mus, etc. Först testade jag det ut genom att bara sätta...

1/3 grundläggande skal utmatning pistol.

3 veckor ska jag försöka få till du stötarna skal avkastad steg i att börja på grundläggande då nästa t jag kommer bygga en mellanliggande shell utmatning pistol och då är kommer att göra en expert shell utmatning pistol. så 3 veckor hoppas jag kunna...

Grundläggande läder halvmask

Välkommen!Här hittar du en handledning om att göra en grundläggande läder halfmask (som visar på 2: a bilden).Jag har arbetat med läder i över 15 år, och ville bara dela en grundläggande gå igenom om hur man gör en bra mask av din alldeles egna :)Gär...

Bygga en grundläggande lap steel-gitarr

i detta, min första Instructable, kommer jag försöka krönika byggandet av en enkel Lap Steel guitar. Ansvarsfriskrivning; elverktyg och skarp skärande verktyg kommer att användas och jag tar inget ansvar för människor som använder dessa saker slarvig...

Grundläggande modifierbara Lödstation

Välkommen till min första Instructable för en Lödstation.Det finns många lödning stationer på denna webbplats så varför är detta en speciell?Det är mycket material effektivt, kan fungera för en variant av brödunderläggen, du kan arbeta i olika vinkla...

Grundläggande för verilog

HDl design:Här jag kommer för att förklara om grundläggande funadamental av handstil tvättprogram i verilog .here jag visar att eller operationen gjort av mig med design såväl som testa bänk. prova detta på online programmering webbplatser.Design: fo...