This site requires JavaScript, please enable it in your browser!
Greenfoot back
Greenfoot_rookie
Greenfoot_rookie wrote ...

2015/3/30

Bild größe ändern

1
2
Greenfoot_rookie Greenfoot_rookie

2015/3/30

#
Hallo Greenfootler Ich habe vorhin angefangen mit greenfoot zu arbeiten und habe eine figur erstellt die sich via pfeiltasten bewegen kann .. läuft soweit .. anschließend habe ich wände erstellt (160x32) die vom Spieler nicht berührt werden dürfen .. wenn ich mich auf die wand zu bewege komme ich zur hälfte in die wand rein und wenn ich "um das rechteck" herum fahre lande ich nach einer zeit innerhalb des kastens oder ich kann ihn je nach winkel ganz überfahren ... ich finde einfach keinen weg das ganze zu lösen (ich bin hier neu genau so wie in greenfoot wäre wirklich nett wenn mir jemand helfen könnte oder mich mal bei skype adden könnte um mit mir meine frage zu klären ) Skype : Littlejohn-derzwerg Code : public class Fahrer extends Actor { public void act() { bewegen(); } private void bewegen(){ int x = getX(); // X-Koordinate in int x speichern int y = getY(); // Y-Koordinate in int y speichern if(Greenfoot.isKeyDown("right") ){ setRotation(90); // Rotiere Bild if(getOneObjectInFront(Block_lang.class)==null) setLocation (x + 2, y); //SetLocation setzt den neuen Standort fest } else if(Greenfoot.isKeyDown("left")){ setRotation(270); if(getOneObjectInFront(Block_lang.class)==null) setLocation(x - 2, y); } else if(Greenfoot.isKeyDown("up")){ setRotation(0); if(getOneObjectInFront(Block_lang.class)==null) setLocation(x, y - 2); } else if(Greenfoot.isKeyDown("down")){ setRotation(180); if(getOneObjectInFront(Block_lang.class)==null) setLocation(x, y + 2); } } private Actor getOneObjectInFront(Class Block_hoch) { GreenfootImage myImage = getImage(); int distanceToFront = myImage.getWidth(); int xOffset =(int) Math.ceil(distanceToFront*Math.cos(Math.toRadians(getRotation()))); int yOffset =(int) Math.ceil(distanceToFront*Math.sin(Math.toRadians(getRotation()))); return (getOneObjectAtOffset(xOffset, yOffset, Block_hoch)); } }
Super_Hippo Super_Hippo

2015/3/30

#
Nun, falls dein Bild nicht quadratisch sein sollte, würde das schon mal nicht klappen. Man kann sich allerdings die 'getOneObjectInFront' Methode auch komplett sparen und stattdessen so vorgehen, dass man das Objekt bewegt und falls man sich überschneiden sollte, die Bewegung rückgängig macht:
1
2
3
4
5
6
7
8
9
10
int dx=0, dy=0;
 
if (Greenfoot.isKeyDown("right") dx++;
if (Greenfoot.isKeyDown("left") dx--;
if(Greenfoot.isKeyDown("up") dy--;
if(Greenfoot.isKeyDown("down") dy++;
 
setLocation(getX()+dx, getY()+dy);
 
if (isTouching(Block_lang.class)) setLocation(getX()-dx, getY()-dy);
Um auf den Titel dieser Diskussion einzugehen. Die Größe eines Bildes kannst du mit der 'scale' Methode ändern.
Greenfoot_rookie Greenfoot_rookie

2015/3/30

#
der block ist rechteckig falls du skype hast könnte ich dir das ganze mal zeigen .... Lässt sich das einfach so übernehmen ? ist ja ne super kurze variante von meinem :D
Greenfoot_rookie Greenfoot_rookie

2015/3/30

#
bin komplett neu und habe nahe zu 0 ahnung
Super_Hippo Super_Hippo

2015/3/30

#
Du könntest probieren, ob es das macht, was du möchtest. Habe übrigens kein Skype.
Greenfoot_rookie Greenfoot_rookie

2015/3/30

#
und was ist das problem bei meinem block ? ich kann von links nach rechts / rechts nach links IMMER durch und von oben nach unten nur bedingt und das möchte ich alles nicht .... gibt es einen anderen weg mit dir kontakt zu halten außerhalb von greenfoot.org?
Greenfoot_rookie Greenfoot_rookie

2015/3/30

#
Ne idee wie ich das mit meinem NICHT quadratischen block löse?
Greenfoot_rookie Greenfoot_rookie

2015/3/30

#
private void bewegen(){ int x = getX(); // X-Koordinate in int x speichern int y = getY(); // Y-Koordinate in int y speichern if(Greenfoot.isKeyDown("right") && getOneObjectAtOffset(5, 0, block.class) == null){ setLocation (x + 2, y); //SetLocation setzt den neuen Standort fest setRotation(90); // Rotiere Bild } else if(Greenfoot.isKeyDown("left") && getOneObjectAtOffset(-5, 0, block.class) == null){ setLocation(x - 2, y); setRotation(270); } else if(Greenfoot.isKeyDown("up") && getOneObjectAtOffset(0, -25, block.class) == null){ setLocation(x, y - 2); setRotation(0); } else if(Greenfoot.isKeyDown("down") && getOneObjectAtOffset(0, 25, block.class) == null){ setLocation(x, y + 2); setRotation(180); } } ich habs mal so mit nem quadrat probiert aber man kommt immer noch von der seite rein ... finde einfach keine hilfe
Super_Hippo Super_Hippo

2015/3/30

#
Hast du das ausprobiert, was ich vorhin geschrieben habe?
Greenfoot_rookie Greenfoot_rookie

2015/3/31

#
ja aber ich glaube ich habe es falsch eingesetzt .. ich tu mich mit greenfoot so schwer .. php und c liegen mir eher aber das hier ? :(
Super_Hippo Super_Hippo

2015/3/31

#
Prinzipiell sollte es die gesamte act Methode (bzw. die bewegen Methode) ersetzen. Das einzige, was damit nicht berücksichtigt ist, ist die Drehung des Bildes.
Greenfoot_rookie Greenfoot_rookie

2015/4/1

#
hab das ganze jetzt anders gelöst jedoch nimmt mein roboter (der automatisch durchs LAB läuft) die blöcke nicht wahr oder er nimmt sie war und rotiert nicht
Super_Hippo Super_Hippo

2015/4/1

#
Wie hast du es denn "gelöst"?
Greenfoot_rookie Greenfoot_rookie

2015/4/1

#
Habe quadratische blöcke und ein zell system ... der spieler funktioniert super und mit dem klappt alles .. der roboter kann den spieler "essen" und ihn somit entfernen .. doch der roboter bewegt sich nur in eine richtung und nimmt keine blöcke wahr .. Danke nochmal für deine lösung zum movement ist deutlich angenehmer als meine
Greenfoot_rookie Greenfoot_rookie

2015/4/1

#
ne idee wie ich dafür sorge das der bot läuft und sich dreht wenn er an nem block ist ?
There are more replies on the next page.
1
2