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

2014/9/9

Objekte platzieren

Asoraso Asoraso

2014/9/9

#
Hallo ich hätte wieder eine Frage. Kann mir wer erklähren, was ich in die Worlddescription schreiben muss, um sagen wir mal "ObjektA" nur in einem bestimmten "Bezirk"( sagen wir ein Quadrat zwichen 2 bestimmten Koordinaten) setzen zu können? Lg Asoraso
Super_Hippo Super_Hippo

2014/9/9

#
Was meinst du damit, es nur dahin setzen zu können? Willst du das Objekt zufällig dort platzieren oder ist dein Szenario eine Art Editor, in dem du Objekte platzieren kannst? Für den ersten Fall kannst du folgendes machen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//x1,y1 Koordinaten des ersten Punktes
//x2,y2 Koordinaten des zweiten Punktes
public Welt()
{
    int x,y;
    if (x2 > x1) x = x1 + r(x2-x1+1);
    else if (x1 > x2) x = x2 + r(x1-x2+1);
    else x = x1;
     
    if (y2 > y1) y = y1 + r(y2-y1+1);
    else if (y1 > y2) y = y2 + r(y1-y2+1);
    else y = y1;
     
    addObject(ObjektA(), x, y);
}
 
public int r(int s)
{
    return Greenfoot.getRandomNumber(s);
}
Alternativ kannst du nach dem Erstellen auch direkt schauen, ob das Objekt in diesem Bezirk ist. Falls nicht, wird es entfernt.
1
2
3
4
5
//in ObjektA
public void addedToWorld(World w)
{
    if (getX() < x1 || getX() > x2 || getY() < y1 || getY() > y2 ) getWorld().removeObject(this);
}
Asoraso Asoraso

2014/9/10

#
Das Objekt wird einfach mit der Maus gesetzt aber es soll nicht möglich sein auserhalb dieses "Bezirkes" das objekt zu setzen es soll nicht einfach sofort verschwinden.
Super_Hippo Super_Hippo

2014/9/10

#
Dann ist es wohl das beste, zu überprüfen, ob die Maus momentan im Bezirk ist und nur falls sie es ist, wird das Objekt erstellt. Das sieht dann in etwa so aus:
1
2
3
4
5
6
7
8
MouseInfo m = (MouseInfo) Greenfoot.getMouseInfo();
if (m != null)
{
    if (m.getX() > x1 && m.getX() < x2 && m.getY() > y1 && m.getY() < y2))
    {
        //addObject...
    }
}
Asoraso Asoraso

2014/9/10

#
Danke sehr
Asoraso Asoraso

2014/9/17

#
aber if (m != null) wird als illegal start of type angezeigt
Asoraso Asoraso

2014/9/17

#
Ich muss dafür act definieren nur hab ich keinen Plan wie ich das machen soll weil "public act() { }"nicht funktioniert.
Super_Hippo Super_Hippo

2014/9/17

#
Da fehlt der Rückgabetyp. Es sieht aus wie bei den Akteuren, es heißt auch dort 'public void act()'. Und dort schließt du dann den Code von oben ein.
Asoraso Asoraso

2014/9/24

#
ich habe es jetzt so gemacht : public void act() { if (m != null) { MouseInfo m = (MouseInfo) Greenfoot.getMouseInfo(); if (m.getX() > x1 && m.getX() < x2 && m.getY() > y1 && m.getY() < y2)) { //addObject... } } nur wird : " if (m.getX() > x1 && m.getX() < x2 && m.getY() > y1 && m.getY() < y2)) " als "Illegal start of expression" angezeigt obwohl das doch jetzt klappen müsste
Asoraso Asoraso

2014/9/24

#
kay die letzte Klammer zu war zu viel
Asoraso Asoraso

2014/9/24

#
Das Problem jetzt beiu dem code wäre das ich x1 definirem muss weil er das nicht als Koordinaten erkennt.
Super_Hippo Super_Hippo

2014/9/24

#
Ja, sorry :x Ich hab x1 und so weiter hingeschrieben. Du wolltest ein Rechteck haben. (x1|y1) sind die Koordinaten der oberen linken Ecke dieses Rechtecks, (x2|y2) ist unten rechts davon.
You need to login to post a reply.