Das Raumschiff-Beispiel mit einem Button kombiniert: Unterschied zwischen den Versionen
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[image:raumbutton.gif]] | [[image:raumbutton.gif]] | ||
+ | |||
+ | = Code zum selbst Ausprobieren = | ||
+ | <pre> | ||
+ | int winkel = 180; | ||
+ | int x = 150; | ||
+ | int y = 150; | ||
+ | |||
+ | Button b = new Button("r", 1, 0, 0, 30, 30, 12, 0); | ||
+ | |||
+ | Raumschiff schiff = new Raumschiff(x,y,15); | ||
+ | |||
+ | |||
+ | void setup() { | ||
+ | background(100); | ||
+ | size(400,400); | ||
+ | schiff.setScale(2); | ||
+ | } | ||
+ | |||
+ | void draw() { | ||
+ | background(100); | ||
+ | //schiff.setPosition(x,y); | ||
+ | schiff.setRotatation(winkel); | ||
+ | schiff.display(); | ||
+ | int b_ = b.showAndCheckButton(); | ||
+ | if (b_!=-1) { | ||
+ | winkel = winkel + 10; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | void keyPressed() { | ||
+ | if (key == 'l') { | ||
+ | winkel = winkel + 10; | ||
+ | } | ||
+ | if (key == 'k') { | ||
+ | winkel = winkel - 10; | ||
+ | } | ||
+ | if (key == 'q') { | ||
+ | y = y - 1; | ||
+ | } | ||
+ | if (key == 'a') { | ||
+ | y = y + 1; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | class Raumschiff { | ||
+ | // Wir machen unser eigenes Dreieck und verwenden nicht den Befehl triangle(x1,y1,x2,y2,x3,y3) denn | ||
+ | // So müssen wir nicht mühsam den Mittelpunkt berechnen | ||
+ | int x, y; // Mittelpunkt | ||
+ | int hoeheSchiff, breiteSchiff; | ||
+ | float scale_ = 1; | ||
+ | int rotation = 0; | ||
+ | |||
+ | Raumschiff(int x_, int y_, int h) { | ||
+ | x = x_; y = y_; hoeheSchiff = h; | ||
+ | } | ||
+ | |||
+ | void setScale(float s) { | ||
+ | scale_ = s; | ||
+ | } | ||
+ | |||
+ | void setRotatation(int r) { | ||
+ | rotation = r; | ||
+ | } | ||
+ | |||
+ | void setPosition(int x_, int y_) { | ||
+ | x = x_; y = y_; | ||
+ | } | ||
+ | |||
+ | void calculateNextPosition() { | ||
+ | |||
+ | } | ||
+ | |||
+ | void display() { | ||
+ | pushMatrix(); | ||
+ | translate(x,y); | ||
+ | scale(scale_); | ||
+ | rotate(radians(rotation)); | ||
+ | translate(-x,-y); | ||
+ | triangle(x-hoeheSchiff, y-hoeheSchiff, x+hoeheSchiff, y-hoeheSchiff, x, y+hoeheSchiff); | ||
+ | //scale(scale_); | ||
+ | popMatrix(); | ||
+ | |||
+ | //translate(x,y); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | // ===================KLASSE BUTTON================================= | ||
+ | class Button { | ||
+ | |||
+ | // Interne Variablen der Klasse. Man könnte auch das Schlüsselwort 'private' voranstellen | ||
+ | String label; | ||
+ | int id; | ||
+ | int xPos, yPos, width_, height_; | ||
+ | int textSize_; | ||
+ | int nextScreen; | ||
+ | boolean buttonIsTransparant = false; | ||
+ | |||
+ | // Constructor | ||
+ | Button(String l, int i, int x, int y, int w, int h, int ts, int s) { | ||
+ | label = l; // Beschriftung des Knopfes | ||
+ | id = i; // Eine eindeutige ID für den Knopf | ||
+ | xPos = x; // Für die Positionierung und Dimensionierung des Knopfes | ||
+ | yPos = y; | ||
+ | width_ = w; | ||
+ | height_ = h; | ||
+ | textSize_ = ts; | ||
+ | nextScreen = s; // Zu welchem Screen führt der Button? | ||
+ | } | ||
+ | |||
+ | int showAndCheckButton() { | ||
+ | push(); | ||
+ | int r = -1; | ||
+ | if ((mouseX>=xPos) && (mouseX<=xPos+width_) && (mouseY>=yPos) && (mouseY<=yPos+height_)) { | ||
+ | strokeWeight(1); | ||
+ | stroke(204, 102, 0); | ||
+ | fill(255); | ||
+ | if (mousePressed) { | ||
+ | r = nextScreen; | ||
+ | fill(120); | ||
+ | } | ||
+ | } else { | ||
+ | strokeWeight(1); | ||
+ | stroke(0, 0, 0); | ||
+ | fill(255); | ||
+ | } | ||
+ | if (!buttonIsTransparant) { | ||
+ | rect(xPos, yPos, width_, height_); | ||
+ | fill(0); | ||
+ | textAlign(CENTER, CENTER); | ||
+ | textSize(textSize_); | ||
+ | text(label, xPos+width_/2, yPos+height_/2); | ||
+ | |||
+ | } | ||
+ | pop(); | ||
+ | return r; | ||
+ | } | ||
+ | |||
+ | int getWidth() { | ||
+ | return width_; | ||
+ | } | ||
+ | |||
+ | int getHeight() { | ||
+ | return height_; | ||
+ | } | ||
+ | |||
+ | void makeTransparant(boolean t) { | ||
+ | buttonIsTransparant = t; | ||
+ | } | ||
+ | |||
+ | void setLabel(String l) { | ||
+ | label = l; | ||
+ | } | ||
+ | } | ||
+ | </pre> |
Aktuelle Version vom 25. März 2020, 08:23 Uhr
Code zum selbst Ausprobieren
int winkel = 180; int x = 150; int y = 150; Button b = new Button("r", 1, 0, 0, 30, 30, 12, 0); Raumschiff schiff = new Raumschiff(x,y,15); void setup() { background(100); size(400,400); schiff.setScale(2); } void draw() { background(100); //schiff.setPosition(x,y); schiff.setRotatation(winkel); schiff.display(); int b_ = b.showAndCheckButton(); if (b_!=-1) { winkel = winkel + 10; } } void keyPressed() { if (key == 'l') { winkel = winkel + 10; } if (key == 'k') { winkel = winkel - 10; } if (key == 'q') { y = y - 1; } if (key == 'a') { y = y + 1; } } class Raumschiff { // Wir machen unser eigenes Dreieck und verwenden nicht den Befehl triangle(x1,y1,x2,y2,x3,y3) denn // So müssen wir nicht mühsam den Mittelpunkt berechnen int x, y; // Mittelpunkt int hoeheSchiff, breiteSchiff; float scale_ = 1; int rotation = 0; Raumschiff(int x_, int y_, int h) { x = x_; y = y_; hoeheSchiff = h; } void setScale(float s) { scale_ = s; } void setRotatation(int r) { rotation = r; } void setPosition(int x_, int y_) { x = x_; y = y_; } void calculateNextPosition() { } void display() { pushMatrix(); translate(x,y); scale(scale_); rotate(radians(rotation)); translate(-x,-y); triangle(x-hoeheSchiff, y-hoeheSchiff, x+hoeheSchiff, y-hoeheSchiff, x, y+hoeheSchiff); //scale(scale_); popMatrix(); //translate(x,y); } } // ===================KLASSE BUTTON================================= class Button { // Interne Variablen der Klasse. Man könnte auch das Schlüsselwort 'private' voranstellen String label; int id; int xPos, yPos, width_, height_; int textSize_; int nextScreen; boolean buttonIsTransparant = false; // Constructor Button(String l, int i, int x, int y, int w, int h, int ts, int s) { label = l; // Beschriftung des Knopfes id = i; // Eine eindeutige ID für den Knopf xPos = x; // Für die Positionierung und Dimensionierung des Knopfes yPos = y; width_ = w; height_ = h; textSize_ = ts; nextScreen = s; // Zu welchem Screen führt der Button? } int showAndCheckButton() { push(); int r = -1; if ((mouseX>=xPos) && (mouseX<=xPos+width_) && (mouseY>=yPos) && (mouseY<=yPos+height_)) { strokeWeight(1); stroke(204, 102, 0); fill(255); if (mousePressed) { r = nextScreen; fill(120); } } else { strokeWeight(1); stroke(0, 0, 0); fill(255); } if (!buttonIsTransparant) { rect(xPos, yPos, width_, height_); fill(0); textAlign(CENTER, CENTER); textSize(textSize_); text(label, xPos+width_/2, yPos+height_/2); } pop(); return r; } int getWidth() { return width_; } int getHeight() { return height_; } void makeTransparant(boolean t) { buttonIsTransparant = t; } void setLabel(String l) { label = l; } }