Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Inventory 2D sidescrolleriin

Squual [04.02.2012 17:21:57]

#

Aloitin eilen pelin tekemisen, kirjan innoittamana. Olen koodannut Javalla abouttia rallaa 1,5 vuotta.
Sain eilen 13 tunnissa jo ihan hyvät pohjat aikaan, kuten pelihahmon, tile mapin ja animaatioita. Hommahan toimii ihan hyvin, pelihahmo liikkuu, ruutu skrollaa ja hahmolla voi ampua. Jokaisella "entityllä" on omat animaatiot myöskin toteuttu.

Kun painat näppäintä I, pitäisi ponnahtaa inventory. Osaan implemoida ActionListener rajapinnan, mutta varsinainen ongelma on se, että miten saan inventoryn ruudulle ja pystyn liikuttelemaan sitä. (Myöhemmässä vaiheessa toteutan MouseListener rajapinnan).

Yritin aluksi JDialogilla, ei onnaa, dialogi jäi fullscreenin alle.
Yritin myös jotain omaperäisempiä ratkaisuja kuten:

public class Inventory extends JPanel

Sain paneelin piirtämään itsensä ruudulle. Paikkaa en saanut vaihdettua. Onko tuo järkevä ratkaisu? Jos on voisiko joku, mahdollisesti sinä, näyttää miten homma toimisi? Grafiikka hommat Javalla (eikä millään muullakaan kielellä) ole niin tuttua hommaa.

Metabolix [04.02.2012 17:40:46]

#

Ilmeisesti piirrät varsinaista peliä suoraan ikkunaan? Jos piirtäisit sen omaan paneeliinsa, muu käyttöliittymä olisi helppo toteuttaa ihan tavalliseen Swing-tyyliin.

Squual [04.02.2012 20:55:06]

#

Joo, suoraan ikkunaan atm. Täytyypä pistää korvan taakse tuo omaan paneeliin piirtäminen. Keksin nyt vaihtoehtoisen ratkaisun, ei ehkä paras, mutta toimii sen aikaa kun keksin paremman tai toteutan tuon omaan paneeliin piirron, mutta tälläsellä ratkaisulla pelitti:


NullRepaintManager.java

public class NullRepaintManager extends RepaintManager {

	public static void install() {
		RepaintManager repaintManager = new NullRepaintManager();
		repaintManager.setDoubleBufferingEnabled(false);
		RepaintManager.setCurrentManager(repaintManager);
	}
    // pari muuta metodia, tyhjiä
}

Game.java

public void init() {
            // muut alustukset ylempänä
            NullRepaintManager.install();
            JFrame frame = (JFrame) screen.getFullScreenWindow();
			Container contentPane = frame.getContentPane();
			contentPane.setLayout(null);  // absolute layout
			((JComponent) contentPane).setOpaque(false);
			contentPane.add(inventoryGUI);
}

public void draw(Graphics g) {
// muut piirrokset tapahtuu ylempänä
frame.getContentPane().paintComponents(g);
}

InventoryGUI.java

	@Override
// InventoryGUI toteuttaa MouseMotionListener rajapinnan
	public void mouseDragged(MouseEvent e) {
		setBounds(e.getX()+getLocation().x, e.getY()+getLocation().y, WIDTH, HEIGHT);
	}

Mielipiteitä?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta