Het maken van een basis 3D-Engine in Java (1 / 5 stap)

Stap 1: De belangrijkste klasse

Het eerste ding dat moet worden gemaakt is een belangrijkste klasse. De belangrijkste klasse zal omgaan met het weergeven van afbeeldingen voor de gebruiker, opgeroepen van andere klassen om te berekenen wat de speler moet worden weergegeven en bijwerken van de positie van de camera.

Voor deze klasse zal de invoer worden:

 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; 

De klasse en de variabelen ervan zal als volgt uitzien:

 public class Game extends JFrame implements Runnable{ private static final long serialVersionUID = 1L; public int mapWidth = 15; public int mapHeight = 15; private Thread thread; private boolean running; private BufferedImage image; public int[] pixels; public static int[][] map = { {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} }; 

Merk op dat de kaart kan worden aangepast aan wat u wilt, wat ik hier heb is slechts een voorbeeld. De nummers op de kaart staan wat voor soort muur zal worden op die positie. Een 0 geeft lege ruimte terwijl een andere nummer vertegenwoordigt een stevige muur en de textuur die daarbij hoort. De BufferedImage is wat wordt weergegeven aan de gebruiker, en pixels is een matrix van alle pixels in de afbeelding. De andere variabelen niet echt weer, dat ze worden alleen gebruikt om de grafiek en het programma naar behoren werkt.

De constructor wordt nu als volgt uitzien:

 public Game() { thread = new Thread(this); image = new BufferedImage(640, 480, BufferedImage.TYPE_INT_RGB); pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData(); setSize(640, 480); setResizable(false); setTitle("3D Engine"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBackground(Color.black); setLocationRelativeTo(null); setVisible(true); start(); } 

De meeste van deze is enkel initialisatie van de klassevariabelen en het frame. De code na "pixels =" verbindt pixels en afbeelding zodat elk gewenst moment de gegevenswaarden in pixels worden gewijzigd de corresponderende wijzigingen aangebracht op de afbeelding worden weergegeven wanneer het wordt weergegeven aan de gebruiker.

De begin- en eindtijd methoden zijn eenvoudig en gebruikt om te controleren of het programma veilig begint en eindigt.

 private synchronized void start() { running = true; thread.start(); } public synchronized void stop() { running = false; try { thread.join(); } catch(InterruptedException e) { e.printStackTrace(); } } 

De laatste twee methoden die moeten worden in de Game klasse zijn de render en methoden worden uitgevoerd. De methode render zal er zo uitzien:

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

Een buffer strategie wordt gebruikt bij het weergeven van zodat schermbijwerkingen glansmachine. Over het geheel genomen helpt met behulp van een buffer-strategie net de spel look beter wanneer uitgevoerd. Als u wilt eigenlijk tekenen het beeld op het scherm is een object graphics verkregen uit de buffer strategie en gebruikt bij het tekenen ons imago.

De methode run is zeer belangrijk omdat het behandelt hoe vaak verschillende onderdelen van het programma worden bijgewerkt. Om dit te doen het wat code gebruikt om bij te houden wanneer 1/60e van een seconde is verstreken, en wanneer het heeft het scherm en de camera worden bijgewerkt. Dit verbetert het hoe vloeiend het programma wordt uitgevoerd. De run methode ziet er zo uit:

 public void run() { long lastTime = System.nanoTime(); final double ns = 1000000000.0 / 60.0;//60 times per second double delta = 0; requestFocus(); while(running) { long now = System.nanoTime(); delta = delta + ((now-lastTime) / ns); lastTime = now; while (delta >= 1)//Make sure update is only happening 60 times a second { //handles all of the logic restricted time delta--; } render();//displays to the screen unrestricted time } } 

Zodra al deze methoden, constructeurs en variabelen zijn dan is het enige wat te doen in de Game klasse op het moment is om een belangrijkste methode toevoegen. De belangrijkste methode is zeer eenvoudig, alles wat je hoeft te doen is:

 public static void main(String [] args) { Game game = new Game(); } 

En nu de belangrijkste klasse is klaar voor het moment! Als u het programma uitvoert moet nu een zwart scherm omhoog knallen.

Gerelateerde Artikelen

LibreOffice Base Tutorial (het maken van een filter in een formulier)

LibreOffice Base Tutorial (het maken van een filter in een formulier)

In deze Tutorial, ik maak een nieuwe database gemaakt met LibreOffice Base en ik probeer om een filter-formulier met behulp van een externe SQL-Query.Met behulp van tekstvak of keuzelijst met invoervak als parameter voor het zoeken naar items in reco
Het maken van een einde-korrel snijplank - ik maakte het op Techshop

Het maken van een einde-korrel snijplank - ik maakte het op Techshop

hieronder zijn verschillende snijplanken die ik bij Techshop, San Francisco, een lidmaatschap op basis workshop met alle soorten van hulpmiddelen gemaakt heb voor het maken van dingen. Ik heb niet veel ervaring met houtbewerking, dus ik dit project g
Het maken van een drie stenen diamond engagement ring.

Het maken van een drie stenen diamond engagement ring.

Dus, je hebt het meisje van uw dromen ontmoet, en nu wilt u geef haar een mooie ring als een blijvend symbool van uw liefde.Probleem is, kun je niet veroorloven een fancy ontwerper ring, en het je kunt veroorloven zijn massa geproduceerd, bezaaid met
Het maken van een 5 Dollar 5 Minute Birdhouse.

Het maken van een 5 Dollar 5 Minute Birdhouse.

Vorig jaar, verhuisd mijn vriendin en ik naar onze eerste plaats samen, een nucleaire-tijdperk-bungalow met een mooie achtertuin. We wilden zetten sommige vogels huizen, maar we waren allebei erg druk met werk en voorjaar was net om de hoek. Dus, ik
Tutorial over het maken van een zwart Locust boog

Tutorial over het maken van een zwart Locust boog

allereerst ik wil excuses voor eventuele grammaticafouten, en eventuele andere fouten schriftelijk caus ik gebruikte google vertalen voor het vertalen van alle tekst die u hier ziet (Engl is niet mijn eigen languge dus schreef ik allemaal in mijn lan
Het maken van een fossiele duizendpoot.

Het maken van een fossiele duizendpoot.

Na instructable wordt beschreven hoe u een duizendpoot-achtige fossiele.Het grafische deel werd gedaan in 3 NodeBox, een open source applicatie voor generative design (en nog veel meer).De gravure deel werd gedaan op een cnc-Snijder (Trotec - Speedy
Het maken van een Cat(?) Masker met glasvezel

Het maken van een Cat(?) Masker met glasvezel

ik ben niet nieuw voor Instructables, maar ik figuur it's about time ik een account te krijgen en terug te geven aan een website die mij zo veel inspiratie en informatie heeft gegeven. Dit is mijn eerste post, zodat alle opmerkingen en kritiek welkom
Het maken van een DIY borstelloze Gimbal met Arduino

Het maken van een DIY borstelloze Gimbal met Arduino

Dit is een verhaal van mijn derde project met goedkope gyro en Arduino.Na de eerdere twee projecten, Gemakkelijk omgekeerd slinger en 3D kalligrafie, ik gedacht heb van het maken van Camera Gimbal met Arduino. Dan had ik drie beleidsregels voor het p
Het maken van een hart ($) gevormd geld Clip in Blender

Het maken van een hart ($) gevormd geld Clip in Blender

Hallo iedereen, je kent mij vanaf mijn animatronic creaties zoals johnny 5, robot tanks en Wall-E.Vandaag, ga ik u tonen hoe te een hartvormige geld clip maken in de blender.Hier is een link naar de mix bestand https://dl.dropboxusercontent.com/u/187
Het maken van een Nintendo SNES-controller in bluetooth; met behulp van een MSI-BGP100

Het maken van een Nintendo SNES-controller in bluetooth; met behulp van een MSI-BGP100

als, zoals velen, u de BGP100 bluetooth gadget wilt voor het spelen van bluetooth op smartphones en PDA's, maar houd niet van de knoppen en het gevoel van de domeincontroller die wordt geleverd met het, hoe zit de herhuisvesting van de controller in
Flip Top fles dop. Het maken van een duurzaam en sterk fles dop voor elke fles wijn of bier.

Flip Top fles dop. Het maken van een duurzaam en sterk fles dop voor elke fles wijn of bier.

Waarschuwing: Dit ondoorgrondelijke is een work in progress. Heeft behoefte aan een heleboel werk.Met deze kroonkurk kunt u elke fles of pot die u wilt sluiten.Je moet.Een fles met een rand in de buurt van de monding van de nek. (Wijn en bier flessen
Lessen in het maken van een middeleeuwse Vielle

Lessen in het maken van een middeleeuwse Vielle

Dit is mijn replica van een middeleeuwse vielle, een voorouder van de moderne viool. Het werd gespeeld door troubadours uit de 13e tot de 15e eeuw.Dit is niet bedoeld als een complete gids voor het maken van een vielle, noch mijn vielle bijzonder aut
Eenvoudige metaalbewerking technieken en het maken van een vlinder staal

Eenvoudige metaalbewerking technieken en het maken van een vlinder staal

Blacksmithing en traditionele metaalbewerking zijn oude ambachten en technieken die snel uit de samenleving verdwijnen. Sommige van die eenvoudige-keer vreugde te herwinnen door te leren hoe om dingen met een hamer en aambeeld te maken! Creativiteit
Van het scherm voor mij: het maken van een prop

Van het scherm voor mij: het maken van een prop

In dit, mijn eerste instructible, ik in detail te beschrijven hoe ik (met hulp) een variatie op een prop van de BBC-show Torchwood gemaakt.  De prop in kwestie is de "Vortex Manipulator" gevonden op de pols van Captain Jack Harkness.  Hieronder