Klassen methode funktioniert nicht wie gewünscht.
ivorysmoker
- java
0 dedlfix0 hotti0 ivorysmoker0 ivorysmoker0 hotti
Hallo zusammen
Ich habe mich etwas in die Klassen vertieft um ein kleines objektorentiertes 2D Spiel zu programmieren.
Jetzt bin ich auf einen Fehler gestossen der mir nicht in den Kopf will.
Vorerst ich benutze: http://processingjs.org/reference/
levelLayer block1 = new levelLayer(200, 200, 20, 20);
void setup(){
block1.blockPlacing();
}
class levelLayer(int width, int height, int thick){
int layerX = width;
int layerY = height;
int thickE = thick;
public void blockPlacing()
{
Block = loadImage("block.jpg");
image(Block, width, height, thick, thick);
}
}
Konsolenfehler:
SyntaxError: missing ; before statement
public void blockPlacing()
Jetzt bin ich etwas Ratlos da ich fast das selbe schon gemacht habe und dies wunderbar funktioniert.
class Player{
//Eigenschaften
int playerX = 200; //Actuell Player Coords
int playerY = 200;
int Speed = 0; // Example for Test
int leftSpeed = 0; //Keyevent trigger
int rightSpeed = 0; //Keyevent trigger
int upSpeed = 0;
int Life = 100;
//Test Methode
public void beschleunigung(int beschleunigung)
{
Speed = Speed + beschleunigung;
}
}
Ich bedanke mich schon zum voraus für eure Ideen!
Tach!
SyntaxError: missing ; before statement
public void blockPlacing()
Mir sticht jetzt auch kein Fehler ins Auge. Die Ursache für Syntaxfehler muss aber nicht unbedingt an der Stelle zu finden sein, die angemeckert wird. Manchmal liegt sie wo ganz anders. Nimm mal den Block raus, in dem der Fehler gemeldet wird. Wenn es dann kompiliert, ist er wirklich da drin.
dedlfix.
Tach!
SyntaxError: missing ; before statement
public void blockPlacing()Mir sticht jetzt auch kein Fehler ins Auge. Die Ursache für Syntaxfehler muss aber nicht unbedingt an der Stelle zu finden sein, die angemeckert wird. Manchmal liegt sie wo ganz anders. Nimm mal den Block raus, in dem der Fehler gemeldet wird. Wenn es dann kompiliert, ist er wirklich da drin.
dedlfix.
Jop, ich habe dies sehr gründlich getestet.
Meine Diagnose:
Ohne die blockPlacing funktion gibt es keine Fehler!
Sobald diese geladen wird gibt es diesen syntax fehler :/
Gruss Ivorysmoker
hi,
deine Klassendefinition
class levelLayer(int width, int height, int thick){
int layerX = width;
int layerY = height;
int thickE = thick;
sollte wohl eher so aussehen:
class levelLayer{
int layerX;
int layerY;
int thickE = 123; // Vorbelegung
}
ggf. mit Vorbelegung der Klassenvariablen. Die Klasse selbst kriegt ja nichts übergeben.
MfG
class levelLayer{
int layerX;
int layerY;
int thickE = 123; // Vorbelegung
}
>
> ggf. mit Vorbelegung der Klassenvariablen. Die Klasse selbst kriegt ja nichts übergeben.
>
> MfG
Hi
Ich habe ein beispiel gesehen wo der Klasse parameter mitgeschickt wurden. Somit fählt der Konstruktor aus. Dies hat meines wissens auch gut funktioniert.
Einige Fehler konnte ich damit beheben:
~~~javascript
levelLayer block1 = new levelLayer();
void setup(){
block1.blockPlacing(200, 200, 20);
}
class levelLayer{
public static void blockPlacing(int layerX, int layerY, int thickE)
{
Block = loadImage("block.jpg");
println("X Breite: "+layerX);
println("Y Breite: "+layerY);
image(Block, layerX, layerY, thickE, thickE);
}
}
Nur leider wird kein Bild geladen :/
Gruss Ivorysmoker
Hi zusammen
Natürlich könnte man das ganze auch so handeln.
levelLayer block1 = new levelLayer();
void drwa(){
image(Block, block1.layerX, block1.layerY, block1.thickE, block1.thickE);
}
class levelLayer{
int layerX = 50;
int layerY = 100;
int thickE = 25;
}
Wichtig ist dass, layerX + layerY verschieden sein müssen. (Was hier jetzt nicht so ist, da es ja fixx definiert ist. Also würde jedes Objekt diese Attribute erhalten was ich aber nicht möchte)
Daher wollte ich der Klasse diese Parameter mitgeben. Somit sind die Werte immer so wie sie beim Layer erstellt werden!
Möglicherweise habe ich diesbezüglich noch etwas falsch verstanden.
Ich hoffe ich konnte schildern was ich erreichen möchte.
Gruss Ivorysmoker
Neues:
levelLayer block1 = new levelLayer(200, 50, 25);
levelLayer block2 = new levelLayer(350, 20, 20);
void draw(){
image(Block, block1.layerX, block1.layerY, block1.thickE, block1.thickE);
}
class levelLayer(X, Y, E){
int layerX = X;
int layerY = Y;
int thickE = E;
println(layerX);
println(layerY);
}
Das Klassen Objekt erhält die richtigen Werte!
Beim Laden leigt noch der Fehler komischerweise kann ich mit block1.layerY nicht auf den Wert zugreifen. Es kommt = undefined. Ist hier möglicherweise etwas mit der Sichtbarkeit nicht in Ordnung? Mit public class habe ich es bereits probiert ohne Erfolg.
Gruss Ivorysmoker
hi,
Das Klassen Objekt erhält die richtigen Werte!
Evntl. können wir uns dahingehend einigen, dass Du damit eine Instanz der Klasse meinst ;)
Klassenmethode: Eine in der Klasse definierte Methode, die nicht über die Instanz aufgerufen wird, sondern über den Namen der Klasse. Zumindest ist das in Perl so und des Weiteren: Klassenvariablen sind im Scope der Klasse definiert. Es ist möglich (immer noch bei Perl) vor dem Erstellen einer Instanz der Klasse (Objekt) Klassenvariablen mit bestimmten Werten vorzubelegen. Dies kann entweder fest codiert sein oder:
In Sachen Java bin ich kein Praktiker, vermute jedoch, dass es ähnliche Mechanismen gibt, wobei Schlüsselworte wie public, private usw. eine weiteren Einfluss auf den Scope nehmen.
Ergo: Nicht weiter rätselraten, sondern einfach mal machen + Nachlesen ;)
Schöne Grüße.