[Java/Processing3] driehoeken onthouden nieuwe posities niet

Pagina: 1
Acties:
  • 540 views

Acties:
  • 0 Henk 'm!

  • daanb14
  • Registratie: December 2013
  • Laatst online: 06-10 08:37
Geachte medeforumleden,

Ik zal eerst een introductie geven van het programma wat ik geschreven heb. Voor school hebben wij de opdracht om met Javacode in het Programma Processing 3 een hardloopwedstrijd te ontwerpen. Op het startscherm bevinden zich twee sliders. Een slider om het aantal hardlopers/robots in te stellen en een tweede slider om de marge tussen de hardlopers/robots in te stellen. Van nu af aan zal ik het robots noemen. Hieronder bevindt zich een akkoordknop. Wanneer je op akkoord klikt worden de driehoeken getekend. Wanneer de driehoeken hun maximale vlak overschrijden, dan wordt de knop "exit" weergeven met daarboven de melding dat de veldgrootte is overschreden. De robots moeten met behulp van de knop "dobbel", die verschijnt wanneer de robots niet over hun marge gaan, bewegen naar rechts. Dit gaat helaas fout. Ik heb de x-coördinaten in een array gezet, waardoor zij tegelijk verplaatst worden, maar de robots onthouden hun nieuwe positie niet als de knop ingedrukt is en de robots gaan terug wanneer de knop uitgedrukt is.
Hieronder drie screenshots van het programma:
foto startscherm
foto overschrijding
foto hardloopwedstrijd
Hieronder volgt het stukje code van de robots
Java: code-robots
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//Hier worden de driehoeken geïntialiseerd en gedefinieerd. Dit stellen hardlopers voor.
void robot(float Margin, float Aantal, int Kleur) {
  for (int i = 0; i < Aantal; i++) {  
    //De array driehoekCoordinaten wordt aangemaakt en de coördinaten worden hieronder gedefinieerd
    float[][] driehoekCoordinaten;
    driehoekCoordinaten = new float[3][3];
    driehoekCoordinaten[0][0] = margin;
    driehoekCoordinaten[1][0] = yKnop / 2 + margin;
    driehoekCoordinaten[2][0] = yKnop + margin;
    driehoekCoordinaten[0][1] = yKnop + margin;
    driehoekCoordinaten[1][1] = margin;
    driehoekCoordinaten[2][1] = driehoekCoordinaten[0][1];
    driehoekCoordinaten[0][1] = (driehoekCoordinaten[0][1] - margin) + ((i * yKnop) + margin) + (Margin * i);
    driehoekCoordinaten[1][1] = (driehoekCoordinaten[1][1] - margin) + ((i * yKnop) + margin) + (Margin * i);
    driehoekCoordinaten[2][1] = (driehoekCoordinaten[2][1] - margin) + ((i * yKnop) + margin) + (Margin * i);
    if (dice == true) {
      for (int j = 0; j < driehoekCoordinaten.length; j++) {
        driehoekCoordinaten[j][0] = driehoekCoordinaten[j][0] + floor(random(1, 7));
      }
    }
    fill(colours[floor(random(0, 10))]);
    triangle(driehoekCoordinaten[0][0], driehoekCoordinaten[0][1], driehoekCoordinaten[1][0], driehoekCoordinaten[1][1], driehoekCoordinaten[2][0], driehoekCoordinaten[2][1]);
    if (driehoekCoordinaten[0][1] > (((yRect / 4) * 3)+margin)) {
      returnMainMenu = true;
    }
    if (driehoekCoordinaten[0][1] < (((yRect / 4) * 3)+margin)) {
      diceButton = true;
    }
  }
}

Hier wordt geregeld wat er met de knop "dobbel" moet gebeuren:
Java: code-dobbel
55
56
57
58
59
60
61
62
63
64
65
void diceButton(int x, int y, int breedte, int hoogte, int kleurRect, int kleurTekst) {
  if (diceButton == true) {
    fill(kleurRect);
    rectMode(CENTER);
    rect(x, y, breedte, hoogte);
    fill(kleurTekst);
    textAlign(CENTER, CENTER);
    textSize(margin / 2);
    text("dobbel", x, y);
  }
}


Hieronder het evenement voor de knop "dobbel" in mousePressed() en mouseReleased():
Java: event-dobbel
66
67
68
69
70
71
72
73
74
75
76
77
78
  if (diceButton == true) {
    if (mouseX > xPosKnop - xKnopDobbel && mouseX < xPosKnop + xKnopDobbel && mouseY > yPosKnop - yKnop && mouseY < yPosKnop + yKnop ) {
      dice = true;
    }
  }
}

void mouseReleased() {
  //Hier wordt geregeld dat de sliders uitgedrukt worden, wanneer de muis losgelaten wordt. Dit geldt ook voor dice, alleen daar gaat het mis
  SLIDERrobotsSelect = false;
  SLIDERmargeSelect = false;
  dice = false;
}

Acties:
  • +2 Henk 'm!

Verwijderd

De initialisatie en de toevoeging op de waarde gebeuren in dezelfde routine. De positie wordt dus elke keer weer opnieuw geinitialiseerd.

Acties:
  • +1 Henk 'm!

  • daanb14
  • Registratie: December 2013
  • Laatst online: 06-10 08:37
Ik heb goed nieuws! Het is opgelost. Ik heb het opgelost door de initalisatie in een apparte methode af te spelen en deze intialisatie maar een keer af te laten spelen. Deze methode heb ik initRobot() genoemd. initRobot() laad een array int[][] in, waarbij 0 om het aantal robots gaat. Die is afhankelijk van de waarde aantalRobots. Vervolgens gaat array 1 over de kleuren. Vervolgens wordt deze array ingeladen en wordt er met een for-lus een vermeerdering van de driehoeken gedaan. De coördinaten zijn nu niet meer onafhankelijk van elkaar, maar zijn allemaal gebaseerd op coördinaat x1. Ik zal vanmiddag laten zijn hoe ik tot deze oplossing gekomen ben. Je hulp was enorm waardevol! Toen kwam ik er dus achter dat het veel handiger is om eerst de array voor de driehoeken appart te intialiseren alvorens deze te declareren in een apparte methode.

Heel erg bedankt iig!

Acties:
  • 0 Henk 'm!

Verwijderd

Hoe ziet de volledige code er uit dan?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
We laten hier over 't algemeen topics die oud zijn lekker rusten in vrede tenzij we een waardevolle toevoeging hebben ;)

[ Voor 67% gewijzigd door RobIII op 10-10-2018 11:10 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Dit topic is gesloten.