Hirdetés

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

  • trisztan94
    őstag

    Sziasztok!

    Box2D-vel kapcsolatban, azon belül collision detection-nel illetve Physics Body Editorral kapcsolatban kérdeznék.

    A helyzet változatlan, van egy karikám, szeretném, ha érzékelné a játék, ha a karika teteje hozzáér a csőhöz.
    PandaMonium ajánlotta erre a Physics Body Editor nevezetű csodás programot.

    Először is ezzel kapcsolatban kérdeznék:

    Rajzoltam két shape-t a collision-re figyelő részeken:

    Ugye itt a teteje és az alja a lényeges. Nézegettem a tool oldalán lévő tutorialt, a sample alkalmazást is, de arra sehogy sem tudok rájönni, hogy hogyan lehetne egy mozgó képre rárakni azt a két shape-t. Mert ugye a karikám touchDrag-re mozog oda ahová húzzuk, de akárhányszor elhúzom ez fogad:

    Persze itt alapból rendesen illeszkedik a képre, csak arrébb húztam, hogy látszódjon. Nem megy a képpel a maszk.. Jelenleg így van definiálva az egész a create() metódusomban:

    BodyEditorLoader karikaLoader = new BodyEditorLoader(Gdx.files.internal("data/collision-masks/karika.json"));
    BodyDef karikaDef = new BodyDef();
    karikaDef.type = BodyType.DynamicBody;
    karikaDef.position.set(karika.getPosition().x, karika.getPosition().y);
    karikaDef.angle = karika.getRotation();

    karikaBody = world.createBody(karikaDef);

    FixtureDef karikaFixture = new FixtureDef();
    karikaFixture.density = 0.5f;
    karikaFixture.friction = 0.8f;
    karikaFixture.restitution = 0.6f;

    karikaLoader.attachFixture(karikaBody, "karika", karikaFixture, karika.getWidth());
    karikaBodyOrigin = karikaLoader.getOrigin("karika", karika.getWidth()).cpy();

    Hogy kéne azt megoldani, hogy a maszk mozogjon vele együtt? Arra már rájöttem, hogy a render() metódusban kéne lennie, de akárhogy próbálgattam helyezgetni a dolgokat (pl: KarikaDef.position-t beraktam a render metódusba mindig a karika draw-olása után), de valamiért sehogy sem működik.

    Viszont ami működik rendesen az a gravitáció. Na de kitaláljátok, hogy mire működik a gravitáció? Hát persze, hogy a DebugRenderer-rel kirajzolt maszkra (amiről eddig szó volt). A karikára hogy tudom rárakni? (Igazából az sem tiszta, hogy most a karika textúrámból hogy tudok egy Body-t csinálni amire aztán ráerősítem a maszkot :F )

    Na, most így hirtelenjében ennyi. A collision detection-ös kérdésemet csak azután teszem fel miután ezt sikerült megoldani (vagy elküldtetek a picsába :P ) :)

    Köszönöm szépen előre is!! :R

    Még hozzátennék egy gyorskérdést:

    van ez a ciklusom:

    while(tubeIterator.hasNext()){
    tube = tubeIterator.next();
    BodyDef tubeDef = new BodyDef();
    tubeDef.type = BodyType.StaticBody;
    tubeDef.position.set(tube.getPosition().x, tube.getPosition().y);

    tubeBody = world.createBody(tubeDef);
    tubeLoader.attachFixture(tubeBody, "tube", tubeFixture, tube.getWidth());
    tubeBodyOrigin = tubeLoader.getOrigin("tube", tube.getWidth()).cpy();
    }

    itt végigiterálok egy tömbön, melyben a "csődarabok" pozíciója van letárolva. Mindig szélesség / 25 darab csődarab van (mert 25px széles egy db), de ez igazából lényegtelen. Úgy oldottam meg a physics mask rátételét az összes darabra, hogy ebbe a ciklusban mindig létrehozom a BodyDefiníciót, mindig ráerősítem a body-ra azt illetve a fixture-t is minden egyes darabhoz "felcsatolom".

    Nem túl memóriazabáló ez így? :F Lehet ezt szebben megoldani?

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