Problém s tlačítkami Try Again a Back – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s tlačítkami Try Again a Back – Java – Fórum – Programujte.comProblém s tlačítkami Try Again a Back – Java – Fórum – Programujte.com

 

Rikimaru
~ Anonymní uživatel
8 příspěvků
19. 11. 2016   #1
-
0
-

Ahojte. Potrebujem pomoc s tlačítkom "Back" a "Try Again". Hráč keď dohrá vypíše mu to At least you tried + skóre. Ale keď chce hráč hrať znova tak mu to celý program zavrie. To isté keď si vyberie v menu tlačítko "Help". Je tam iba popísané ako sa to ovláda a to je všetko. Ale keď chce ísť hráč späť do hlavného menu a klikne na tlačítko "back" vypne to celý program. Trápim sa s tým už asi 3 dni a je to celkom depresívne. (Iba začínam s Javou). A pri všetkých "game.gameState" mi píše: "The static field Game.gameState should be accesed in static way.

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;

import com.tutorial.main.Game.STATE;

public class Menu extends MouseAdapter{
    
    private Game game;
    private Handler handler;
    private HUD hud;
    private Random r = new Random();
    
    public Menu(Game game, Handler handler, HUD hud){
        this.game = game;
        this.hud = hud;
        this.handler = handler;
        
    }
    
    public void mousePressed(MouseEvent e){
        int mx = e.getX();
        int my = e.getY();
        
        if(game.gameState == STATE.Menu){
            //Play button
            if(mouseOver(mx, my, 210, 150, 200, 64)){
                game.gameState = STATE.Game;
                handler.addObject(new Player(Game.WIDTH/2-32, Game.HEIGHT/2-32, ID.Player, handler));
                handler.clearEnemys();
                handler.addObject(new BasicEnemy(r.nextInt(Game.WIDTH - 50), r.nextInt(Game.HEIGHT - 50), ID.BasicEnemy, handler));    
            
            }    
            //Help Button
            if(mouseOver(mx, my, 210, 250, 200, 64)){
                game.gameState = STATE.Help;
            }
            
            }
            
            
            //Quit button
            if(mouseOver(mx, my, 210, 350, 200 ,64)){
                System.exit(0);
            }
        
        
        //back button for Help
            if(game.gameState == STATE.Help) {
                 if(mouseOver(mx, my, 210, 350, 200, 64)) {
                    game.gameState = STATE.Menu;
                     return;
                   }
            }
            
                //back button for Help
            if(game.gameState == STATE.Help) {
                 if(mouseOver(mx, my, 210, 350, 200, 64)) {
                    game.gameState = STATE.Menu;
                hud.setLevel(1);
                hud.setScore(0);
                handler.addObject(new Player(Game.WIDTH/2-32, Game.HEIGHT/2-32, ID.Player, handler));
                handler.clearEnemys();
                handler.addObject(new BasicEnemy(r.nextInt(Game.WIDTH - 50), r.nextInt(Game.HEIGHT - 50), ID.BasicEnemy, handler));
            }
        }        
        
    }
    
    public void mouseReleased(MouseEvent e){
        
    }
    
    private boolean mouseOver(int mx, int my, int x, int y, int width, int height){
        if(mx > x && mx < x + width){
            if(my > y && my < y + height){
                return true;
            }else return false;
        }else return false;
    }
    
    
    public void tick(){
        
    }
    
    public void render (Graphics g){
        if(game.gameState == STATE.Menu){
        Font fnt = new Font("arial", 1, 50); 
        Font fnt2 = new Font("arial", 1, 40);
        
        g.setFont(fnt);
        g.setColor(Color.white);
        g.drawString("Wave", 250, 50);
        
        g.setFont(fnt2);
        g.drawRect(210, 150, 200, 64);
        g.drawString("Play", 270, 190);
        
        g.drawRect(210, 250, 200, 64);
        g.drawString("Help", 270, 290);
        
        g.drawRect(210, 350, 200, 64);
        g.drawString("Quit", 271, 390);
    }else if(game.gameState == STATE.Help){
        
        Font fnt = new Font("arial", 1, 50); 
        Font fnt2 = new Font("arial", 1, 40);
        Font fnt3 = new Font("arial", 1, 20);
        
        g.setFont(fnt);
        g.setColor(Color.white);
        g.drawString("Help", 250, 50);
        
        g.setFont(fnt3);
        g.drawString("Use WASD keys to move player and dodge enemies", 80, 230);
        
        g.setFont(fnt2);
        g.drawRect(210, 350, 200, 64);
        g.drawString("Back", 255, 395);
        
    }else if(game.gameState == STATE.End){
        Font fnt = new Font("arial", 1, 50); 
        Font fnt2 = new Font("arial", 1, 40);
        Font fnt3 = new Font("arial", 1, 20);
        
        g.setFont(fnt);
        g.setColor(Color.white);
        g.drawString("Game Over", 180, 50);
        
        g.setFont(fnt3);
        g.drawString("At least you tried: " + hud.getScore(), 80, 230);
        
        g.setFont(fnt2);
        g.drawRect(210, 350, 200, 64);
        g.drawString("Try Again", 225, 395);
    }
}
}

Prepáčte ak som v tomto vlákne niečo pokazil alebo zle napísal. Ale ešte sa v tomto neviem celkom orientovať. Keď tak ďakujem každému za pomoc :).

Nahlásit jako SPAM
IP: 217.144.24.–
Matrix17
~ Anonymní uživatel
300 příspěvků
19. 11. 2016   #2
-
0
-

#1 Rikimaru
A pri všetkých "game.gameState" mi píše: "The static field Game.gameState should be accesed in static way.

Tohle ti to píše nejspíš proto, že máš ve třídě Game atribut gameState jako statický a přistupuješ k němu přes instanci. Tj. správný přístup ke statickému objektu je Game.gameState ne přes jeho instanci. Běžné řešení je přes getter a setter a ten atribut dej private a NEstatický.

Úplně nechápu jak máš vytvořené gui. Tlačítku můžeš nastavit jeho handler, který po kliku provede akci, takže nemusíš vůbec řešit kontrolování pozice myši atd. Snaž se využít maximálně toho, co komponenty umí a zbytečně si nepřidělávat práci. Na netu je na tohle spousta příkladů. ;)

Nahlásit jako SPAM
IP: 213.226.237.–
Rikimaru
~ Anonymní uživatel
8 příspěvků
19. 11. 2016   #3
-
0
-

#2 Matrix17
Ďakujem veľmi pekne. Som v tomto začiatočník a úplne presne neviem všetky tieto príkazy a metódy, ktorými sa to dá spraviť. Toto je môj prvý väčší projekt. Do teraz som robil iba niečo v tom štýle: "Ahoj ja som ... A mám ... rokov. Takže celkom iná liga toto na mňa :D Ale velice pekne ešte raz ďakujem za rady.

Nahlásit jako SPAM
IP: 217.144.24.–
gna
~ Anonymní uživatel
1891 příspěvků
20. 11. 2016   #4
-
0
-

#3 Rikimaru
Odnělud jsi to zkopíroval a nechápeš ani řádek. Pořádně to pročti a až se v tom vyznáš, tak něco měň.

Na youtube je k tomu tvému kódu série videí - Java Programming: Let's Build a Game #1

Nahlásit jako SPAM
IP: 213.211.51.–
Rikimaru
~ Anonymní uživatel
8 příspěvků
20. 11. 2016   #5
-
0
-

#4 gna

Podľa tohoto tutoriálu som to robil :). Pravda nerozumiem všetkému, ale moje nedostatky, ktoré mám sa snažím doplniť takýmito fórami, tutoriálmi, a stránkami kde sa touto tématikou zaoberá viacej ľudí. Tento tutoriál ktorý ste mi poslali tak podľa toho som postupoval krok za krokom a poriadne som počúval čo aký príkaz znamená. Ale "Chybička se bloudí" a niečo v tomto nemám správne. Preto som napísal sem, že možno tu bude niekto kto mi bude môcť pomôcť s týmito dvoma problémami "Try Again" a "Back". PS: Jediné čo som menil bola FARBA nepriateľov a pokiaľ má toto nejaký dopad na celý ten program tak sa velice ospravedlňujem ...

Nahlásit jako SPAM
IP: 217.144.24.–
Rikimaru
~ Anonymní uživatel
8 příspěvků
20. 11. 2016   #6
-
0
-

#4 gna
A inak už som na to prišiel aj sám :). A nabudúce také reči ako:"Odnělud jsi to zkopíroval a nechápeš ani řádek." si nechajte pre seba. Najprv si zistite fakty a potom môžte ostatných ľudí podľa toho súdiť.

Nahlásit jako SPAM
IP: 217.144.24.–
Rikimaru
~ Anonymní uživatel
8 příspěvků
20. 11. 2016   #7
-
0
-

#2 Matrix17
Mám na vás otázku ak smiem. Nevedeli by ste mi vysvetliť čo a ako funguje ten handler? V tom mám ešte trochu chaos.

Nahlásit jako SPAM
IP: 217.144.24.–
gna
~ Anonymní uživatel
1891 příspěvků
21. 11. 2016   #8
-
0
-

#6 Rikimaru

Já jsem to nepsal, abych tě urazil. Konstatoval jsem fakt, poradil ti a dokonce jsem se obtěžoval s tím, abych ti ten tutorial na YT našel.

Takže si ten seriál laskavě opravdu projeď (nebo raději ne, je celkem k ničemu), neztrapňuj se a neser mě.

Nahlásit jako SPAM
IP: 213.211.51.–
Rikimaru
~ Anonymní uživatel
8 příspěvků
21. 11. 2016   #9
-
0
-

#8 gna
Tak potom ďakujem veľmi za vaše rady a som rád, že ste si našli čas preto aby ste odpísal takému neschopnému blbcovi ako som ja. Nechcel som vás nijak nasrať alebo niečo podobné, za to sa hlboko ospravedlňujem.

Nahlásit jako SPAM
IP: 217.144.24.–
Matrix17
~ Anonymní uživatel
300 příspěvků
22. 11. 2016   #10
-
0
-

#9 Rikimaru
Předpokládám, že někde budeš mít něco jako je tohle:

JButton button = new JButton("Zpět");

Pak už ti stačí tam přidat ten handler (u swingu se tomu nadává action listener).

 button.addActionListener(new ActionListener()
    {
      @Override
      public void actionPerformed(ActionEvent e)
      {
        // nějaká akce co se má stát při kliku na tlačítko
      }
    });


Samozřejmě ještě pak můžeš to rozhraní implementovat a předat tam místo anonymní třídy, instanci nějaké svojí třídy.

Nahlásit jako SPAM
IP: 176.74.134.–
Rikimaru
~ Anonymní uživatel
8 příspěvků
22. 11. 2016   #11
-
0
-

#10 Matrix17
Tento problém s tlačítkami "Back" a "TryAgain" už mám vyriešený :). Teraz by som práve potreboval pomôcť spraviť niečo v takomto zmysle: Pokiaľ bude get.Level()=15 tak vyhráte hru. Vyskočí vám Congratulations a tlačítko "Wanna try again?"
1.
Toto plní svoj účel a hodí ma to do STATE.Menu. Ale myš reaguje na úplne celé okno. To znamená, že hoci kde kliknem ma to hodí to menu.
 2.
Keď sa dostanem do menu tak náhodné "MenuParticles" (to sú iba random pohybujúci sa enemáci v pozadí) sa tam nenachádzajú. Proste celé menu je na pozadí čierne.Tlačítka fungujú.
3.
Player po prepnutí do Menu stále ostáva a môžete s ním manupulovať.

Nahlásit jako SPAM
IP: 217.144.24.–
Rikimaru
~ Anonymní uživatel
8 příspěvků
22. 11. 2016   #12
-
0
-

#11 Rikimaru
Tlačítko "Wanna Try Again" som už vyriešil. Už vracá naspäť iba tlačítko nie celá obrazovka.

Nahlásit jako SPAM
IP: 217.144.24.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý