Problemer med at få gameMenu til at virke!

mathiaskruse
Level 0 - Null
Posts: 5
Joined: 11 Apr 2013, 21:36

Problemer med at få gameMenu til at virke!

Unread post by mathiaskruse » 17 Apr 2013, 20:21

Hej alle. Jeg er igang med at prøve at opsætte en menu til mit spil. Det går sådan set meget fint, udover at jeg ikke kan få min thread til at starte når jeg trykker på knappen.

Alt virker, undtagen at starte thread da den så vil have en ikke "static" method, og hvis jeg laver den om til ikke static kan min mouseListener ikke finde ud af det :(


Min Main Code

Code: Select all

	public static void ClickStartGame(int MB) {
		if (MB == 1) {
			if (!Screen.store.gameStarted) {
				if (Screen.store.startButton.contains(mse)) {
					System.out.println("Start Game");
					Screen.store.gameStarted = true;
					thread.start();
				}
				if (Screen.store.quitButton.contains(mse)) {
					System.out.println("Quit Game");
				}
			}
		}
	}
MouseListener kode:

Code: Select all

	public void mousePressed(MouseEvent e) {
		Screen.ClickStartGame(e.getButton());
	}

User avatar
mattsson
Level 1 - Speck of dust
Posts: 13
Joined: 11 Apr 2013, 13:11
Location: Copenhagen
Contact:

Re: Problemer med at få gameMenu til at virke!

Unread post by mattsson » 18 Apr 2013, 09:24

Hvis metoden ikke er static, skal du initialisere et objekt af den givne klasse først, dvs. du kan tilgå metoder i din Screen-klasse, hvis du først har initialiseret et objekt af klassens type:

Code: Select all

Screen myScreen = new Screen();
Du kan så efterfølgende tilgå ClickStartGame() via:

Code: Select all

public void mousePressed(MouseEvent e) {
    myScreen.ClickStartGame(e.getButton());
}
Normalt skal flere metoder have adgang til det initialiserede objekt, så man vil deklarere en variabel i starten af klassen, som alle metoder kan tilgå, og så initialisere denne i fx Main() eller en anden metode, der kører først fx:

Code: Select all

SomeClass {
	Screen myScreen;
	
	void Main() {
		myScreen = new Screen();
	}
	
	public void mousePressed(MouseEvent e) {
		myScreen.ClickStartGame(e.getButton());
	}
}
Software and web dude at gearworks.dk, blog at marcusm.dk

mathiaskruse
Level 0 - Null
Posts: 5
Joined: 11 Apr 2013, 21:36

Re: Problemer med at få gameMenu til at virke!

Unread post by mathiaskruse » 19 Apr 2013, 12:57

I hvilken class skal jeg initialisere det objekt? - i min KeyHandle?
Jeg ved hvordan det skal fungere hvis jeg kun har en class, men jeg har 9 i mit spil, og ud fra det jeg har lært so far er opsætningen af spillet pænt skod, så jeg ved ikke rigtigt om jeg kan forklare noget som helst uden at skulle vise dig kildekoden? :/

User avatar
Code
Level 39 - Hitman
Posts: 394
Joined: 13 Feb 2013, 14:56
Location: Aalborg
Contact:

Re: Problemer med at få gameMenu til at virke!

Unread post by Code » 19 Apr 2013, 21:59

mathiaskruse wrote:I hvilken class skal jeg initialisere det objekt? - i min KeyHandle?
Jeg ved hvordan det skal fungere hvis jeg kun har en class, men jeg har 9 i mit spil, og ud fra det jeg har lært so far er opsætningen af spillet pænt skod, så jeg ved ikke rigtigt om jeg kan forklare noget som helst uden at skulle vise dig kildekoden? :/
Tjah noget kildekode kommer du nok til at vise, men jeg ville nok ikke være bange for at vise den. Altså, hvis det ikke er et kæmpe spil, så vil det jo bare virke som en tutorials for de fleste alligevel :)
Spiludvikling og undervisning i Unity3D
http://www.code.dk

Danmarksmesterskabet i spiludvikling.
http://www.dmspil.dk

Jannek
Level 0 - Null
Posts: 7
Joined: 04 Aug 2008, 02:00
Location: København
Contact:

Re: Problemer med at få gameMenu til at virke!

Unread post by Jannek » 21 Apr 2013, 01:35

Som mattsson også viser, bør du ikke bruge static til den slags. Jeg antager at du selv har lavet klassen Screen. Hvis du på intet tidspunkt skal bruge mere end én Screen, kan du i stedet oprette den som et singleton:

Code: Select all

public class Screen {
  // Dette er dit ENESTE static felt, med mindre du har en meget god grund til at have andre.
  public static final instance = new Screen();

  private Screen() {
    // stuff you like :)
  }

  // fields and methods you like :)
}
Så skal du bare kalde din funktion med

Code: Select all

public void mousePressed(MouseEvent e) {
  Screen.instance.clickStartGame(e.getButton());
}
Og husk i Java skriver man både metoder og felter med lille begyndelsesbogstav :) (clickStartGame ikke ClickStartGame) Det er en god ting at følge standarten.

Hvis du ikke ved om du kan forklare det, uden at vise koden, SÅ VIS KODEN!

User avatar
mattsson
Level 1 - Speck of dust
Posts: 13
Joined: 11 Apr 2013, 13:11
Location: Copenhagen
Contact:

Re: Problemer med at få gameMenu til at virke!

Unread post by mattsson » 21 Apr 2013, 21:32

mathiaskruse wrote:I hvilken class skal jeg initialisere det objekt? - i min KeyHandle?
Jeg ved hvordan det skal fungere hvis jeg kun har en class, men jeg har 9 i mit spil, og ud fra det jeg har lært so far er opsætningen af spillet pænt skod, så jeg ved ikke rigtigt om jeg kan forklare noget som helst uden at skulle vise dig kildekoden? :/
Hvilken klasse skal bruge Screen-klassen?
Software and web dude at gearworks.dk, blog at marcusm.dk

Post Reply