Ich habe 3 Greenfoot fragen?

1 Antwort

Keine Ahnung was Greenfoot ist, aber ich versuche mal diesen Code anhand den meisten Programmiersprachen zu beschreiben.

Beim ersten wolltest du "a == false" kürzer schreiben. Da in diesem Fall "a" ein bool ist, kannst du genau so "!a" schreiben. Das Rufzeichen macht ein "true" zu "false" und ein "false" zu "true", also eine ganz einfach Verneinung, wie man es in der Aussagenlogik nennen würde.

Beim zweiten "if(a){} Else{b();}" geh ich mal davon aus, dass dem ersten {}-block nichts ausgeführt wird. Dazu kannst du genau so "if(!a){b();} sagen, da wenn a nicht true ist würde es oben zum else kommen. Das Rufzeichen ist wie oben erklärt eine Verneinung, also kannst dus so schreiben.

Beim letzten geht ich davon aus, dass Actor eine Klasse ist (also ein Referenztyp). Das würde bedeuten, wenn du "a=b" machst, gibst du b die Referenz vom Objekt weiter, auf den a auch referenziert. Das bedeutet, dass beide auf das gleiche Objekt referenzieren. Sprich: alles was du mit b machst, passiert auch mit a (auch umgekehrt), weil sie sich das gleiche Objekt teilen.

Ich hoffe ich konnte helfen c:


nyaaa844  09.11.2015, 09:04

Also, was du machen kannst (und was auch am sinnvollsten wäre) ist, den NPC aus der World zu löschen, sodass er auch wirklich tot ist. Dann sollte auch sein Act Methode nicht mehr aufgerufen werden (da bin ich mir aber nicht sicher, da ich das Framework nicht kenne). Die sicherere Lösung (aber meiner Meinung nach auch die unschöner) ist, ganz am Anfang der Methode diese Codezeile zu setzen: if (dead) { return; } Diese Zeile bewirkt, dass wenn der Bool true ist (sprich, er dann tot ist), dass die Act Methode gleich mach dem if abgebrochen wird. Gib mir bescheid, was dabei rausgekommen ist und sorry für die späte Antwort c:

0
Luxuser 
Beitragsersteller
 08.11.2015, 14:42

danke für die gute Unterstützung :D hab noch eine andere Frage, ich habe eine act methode gemacht, die immer wieder aufgerufen wird, aber nicht mehr aufgerufen werden sollen wenn was bestimmtes passiert (figur stirbt) kennst du eine Befehl der die act methode abbricht ? also sowas wie getSystem.stop(); nur funktioniert diese nicht :(

import greenfoot.*;

public class NPC extends PI1GameActor{ 

 private boolean dead = false; 

 public NPC() { setOrigin(24, 83); //Setzt den Ursrung auf die Mitte der Unteren Kante der Graphik }

 public void setDead(boolean d){ dead = d; }

 public boolean getDead(){ return dead; } 

 public void act(){ 

 CSWorld map = (CSWorld)getWorld(); 

 int rotation=getRotation();

 if(isObjectHere("Player")){ // figur wird geschlagen wenn player auf dem feld

 map.getTod().bury(this); 

 setDead(true); }

 if(map.getPlayerMoved()==true){ if(rotation == 0 && isObjectHere("FloorSE")) move(1); else if(rotation == 1 && isObjectHere("FloorSW")) move(1); else if(rotation == 2 && isObjectHere("FloorNW")) move(1); else if(rotation == 3 && isObjectHere("FloorNE")) move(1); else setRotation(Greenfoot.getRandomNumber(4)); } // 

if(getDead()==true)map.stopped(); //soll act nicht mehr machen wenn figur tod ist

 }} 

also das soll ein spiel sein, ich meách ein zug dann der gegner. wenn der gegner geschlagen, soll er auf dem friedhof landen und sich nicht mehr bewegen. nur dreht sich die figur im friedhof das soll sie aber nicht .... hast du eine idee ?

0
nyaaa844  08.11.2015, 13:42

a bleibt ja immer noch variabel (es ist nicht vorgegeben). Wenn du jetzt zum Beispiel "if(!a){...}" schreibst, kommt er nur rein, wenn "a == false" ist. Wenn "a == true" wäre, dann würde er nicht ins if reinkommen.

0
Luxuser 
Beitragsersteller
 08.11.2015, 13:35

Nochmal eine kurze Anmerkung zum ersten, geht das mit !a denn eigentlich nicht nur wenn a == true ist? aber dies ist ja nicht vorgegeben ? Sonst wäre es ja zu einfach :D ansonsten hast du meine Vermutungen bestätigt ;D

0