Hirdetés

Keresés

Új hozzászólás Aktív témák

  • trisztan94

    őstag

    válasz trisztan94 #1083 üzenetére

    Szerk: (#1084) hunfatal: Köszönöm, megnézem majd :K

    Még egy dolgot kérdeznék :K

    A collision detection eddig így volt megoldva:

    Iterator < Body > iter = raindrops.iterator();
    while (iter.hasNext()) {
    Body raindrop = iter.next();
    if (raindrop.y + 64 < 0) {
    dropped++;
    iter.remove();
    }
    if (raindrop.overlaps(bucket)) {
    dropSound.play();
    catched++;
    iter.remove();
    }
    }

    Amikor összeér a vödör és a csepp, akkor nagyon szépen eltűnt a csepp és lejátszotta a hangot.
    Ez amúgy a libgdx "Simple app" tutorialján alapszik, csak átalakítanám box2d-re (gravitáció, "szél" [x tengelyen gravitáció], box2dlight, stbstb miatt)

    Tehát beraktam ez helyett a box2d-s collision detection-t. így:

    Iterator < Body > iter = raindrops.iterator();
    while (iter.hasNext()) {
    Body raindrop = iter.next();

    world.setContactListener(new ContactListener() {

    @Override
    public void beginContact(Contact contact) {
    Fixture fixtureA = contact.getFixtureA();
    Fixture fixtureB = contact.getFixtureB();
    if ((String) fixtureA.getBody().getUserData() == "bucket" && (String) fixtureB.getBody().getUserData() == "drop" || (String) fixtureA.getBody().getUserData() == "drop" && (String) fixtureB.getBody().getUserData() == "bucket") {
    //csepp és vödör ütközik
    dropSound.play();
    catched++;
    iter.remove();

    }
    if ((String) fixtureA.getBody().getUserData() == "ground" && (String) fixtureB.getBody().getUserData() == "drop" || (String) fixtureA.getBody().getUserData() == "drop" && (String) fixtureB.getBody().getUserData() == "ground") {
    //csepp és föld ütközik
    dropped++;
    iter.remove();
    }
    }

    @Override
    public void endContact(Contact contact) {}

    @Override
    public void preSolve(Contact contact, Manifold oldManifold) {
    // TODO Auto-generated method stub

    }

    @Override
    public void postSolve(Contact contact, ContactImpulse impulse) {
    // TODO Auto-generated method stub

    }

    });
    }

    Viszont az iter.remove()-ra ezt a hibát dobja:

    "Cannot refer to a non-final variable iter inside an inner class defined in a different method"

    Ráraktam az iterátorra a "final" modifikációt, akkor nem hibázik, de amikor valami ütközik (csepp - talaj, csepp - vödör), akkor nem az tűnik el amelyik ütközött, hanem egy tök random.

    Értitek, hogy mit magyarázok? :D Tudok készíteni egy videót a dologról, ha kell.

    Köszönöm szépen előre is a segítséget! :R :R

  • fatal`

    titán

    válasz trisztan94 #1083 üzenetére

    Nézz körül az andengine fórumon, a box2d ugyanaz.

    Ne fixturet hasonlíts, hanem bodyt (fixture.getBody()) és/vagy userDatat.

Új hozzászólás Aktív témák