Avatar billede VC1 Seniormester
18. maj 2022 - 17:12 Der er 5 kommentarer

Hvordan laver jeg mit objekt smartest, når det skal kunne flyttes?

Jeg har en class Player, hvori jeg definerer inputs til en player.
Så har jeg en class MyFrame, hvor jeg laver objektet (tegner), men denne skal være flytbar, hvordan skal min indgangsvinkel være for at gøre dette nemmest? Skal jeg lave en form for @Override?
(OBS. brikken skal senere laves så den ses rykkes langsomt mod nyt koordinat og ikke bare et hurtigt ryk/load)

Ligeledes, alle mine 5 player objekter er hardcoded, kan det gøres smartere?

>>class Player
    private String playerNum;
    private int xPostmp, yPostmp, sizeHead;
    private Color color;

    public Player(String playerNum, Color color, int xPostmp, int yPostmp, int sizeHead) {
        this.playerNum = playerNum;
        this.color = color;
        this.xPostmp = xPostmp;
        this.yPostmp = yPostmp;
        this.sizeHead = sizeHead;
    }
***** der er getter på alt ovenstående******

>>MyFrame
public void player(Graphics g) {
                        Graphics2D g2d = (Graphics2D) g;
                        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //make borderline smoother

                        Player one = new Player("playerOneOrange", Color.orange, 222, 265, 20); 
//xPostmp, yPostmp og sizeHead er pt hardcoded, men ændres senere

                        Ellipse2D.Double playerOneOrange = new Ellipse2D.Double(222, 265, 20, 20);
                        g2d.setColor(one.getColor());
                        g2d.fill(playerOneOrange);
                        int[] xPoints = {222, 232, 242};
                        int[] yPoints = {300, 275, 300};
                        g2d.fillPolygon(xPoints, yPoints, 3);
Avatar billede arne_v Ekspert
18. maj 2022 - 17:56 #1
Du skal vel have en data model med klasser uden GUI og en GUI model med klasser - en for din frame (extends JFrame) og en for player (extends JPanel).

Og så skal du beslutte hvordan der skal flyttes. Flytte en pixel af gangen med en overriden paint metode? Flytte dine player GUI objekter i en grid layout på din frame.
Avatar billede VC1 Seniormester
18. maj 2022 - 19:16 #2
Altså jeg har klasser med og uden extends af JPanel.

class Main -> class GameUI (extends JPanel laver mit vindue, paneler, buttons mm.)
class GameUI -> class MyFrame (extends JPanel og 'painter' baggrund m. billede og divserse felter (kalder repaint() for at tegne mine roterende ''cirkler'')

Nu har jeg så lavet, som i mit spørgsmål, en class player og tilføjet public void player() kaldet i class MyFrame, hvor at jeg vil tegne brikkerne/spillerne.

Dog kan jeg ikke hitte ud af hvordan dette kan gøres nemt og uden så meget hardcore, samtidig med at jeg senere kan bruge disse ''objekter'' til at flytte med.


- Blot til bedre forståelse af hvad jeg prøver på, så prøver jeg at lave spillet brætspillet Pandemic.
https://www.youtube.com/watch?v=l41PyNw8Dig


Jeg har prøvet at lave en UML, måske giver indblik i min opsætning.
Kan sættes ind nederst på denne side - https://plantuml.com/

@startuml
object Main
object GameUI
object Player
object CardInfections
object MyFrame

Main <|-- GameUI
GameUI *-- MyFrame
GameUI *-- "48...53" CardInfections
GameUI *-- "2...5" Player
Player *-- "2...5" MyFrame
CardInfections *-- MyFrame

GameUI : -Jframe mainFrame
GameUI : -MyFrame dc
GameUI : Methods
GameUI : gameGUI()
GameUI : Methods

MyFrame : Color orange,white etc.
MyFrame : -int xc, yc, r,diam
MyFrame : -double inc, theta
MyFrame : methods
MyFrame : + paintComponent()
MyFrame : + fields()
MyFrame : + player()

Player : - String playerNum
Player : - Color color
Player : - int xPostmp
Player : - int yPostmp
Player : - int sizeHead
Player : Methods
Player : + getter on all above()

CardInfections : ArrayList<String> CardInfections
CardInfections : ArrayList<String> CardInfectionsShuffler
CardInfections : methods
CardInfections : + startNewGame()
CardInfections : + newGameCardShuffle()
CardInfections : + putPandemicCardInArray()
CardInfections : + cardToArrayAndShuffleBack()
CardInfections : + readFromArrayPutInSQL()
CardInfections : + readInfectionsFromFile()
CardInfections : + deleteSQLinfections()
CardInfections : + counCardRowSQL()

@enduml
Avatar billede arne_v Ekspert
19. maj 2022 - 04:07 #3
Jeg undrer mig lidt over class diagram. Men jeg kender ikke spillet.

Jeg kan godt lave et eksempel, men det vil være en del linier.  :-)
Avatar billede VC1 Seniormester
19. maj 2022 - 04:24 #4
Det behøver du virkelig ikke, men jeg vil da virkelig gerne høre hvad du undres ved omkring mit klasse diagram :)
- Jeg suger til mig af dine inputs for at få en bedre forståelse af det hele
Avatar billede arne_v Ekspert
19. maj 2022 - 16:52 #5
Jeg ville have lavet en meget klar separation mellem:
* kerne spil data og logik
* GUI visningen af samme
med separate klasser til hver.

Det første er uafhængigt af GUI. Og kunne principielt bruges af forskellige GUI's: Swing, JavaFX, JSP, JSF etc..

++++

Det ser ud som om du har two frames.

Normalt har man kun en frame og bygger så op med diverse panels, layout managers og controls.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





CIO
Stort CIO-interview: Lemvigh-Müllers milliard-omsætning er blevet digital