Keresés

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

  • Oppenheimer

    nagyúr

    válasz Karma #4442 üzenetére

    Köszönöm a terjedelmes válaszokat! Sorban reagálok mindre.

    4440:
    első: különösebb oka nincs, ha hazajöttem átírom foreachre

    második: értem, MVC minta alapján szeretném természetesen megcsinálni a játékot, de ez az első ilyen dolog amit csinálok, és a hajnalig tartó gányolásnak lett ez az eredménye. Szóval a destroyEmeny()-t majd animator.animationCycle()-ben kell majd gondolom meghívni, de még nincsenek se lövedékek, se ütközésdetektálás, úgyhogy az arrébb lesz.

    harmadik: erre neten találtam egy példát, ezt is beleírom majd ha hazaértem

    public void run() {

    long beforeTime, timeDiff, sleep;

    beforeTime = System.currentTimeMillis();

    while (ingame) {
    repaint();
    animationCycle();

    timeDiff = System.currentTimeMillis() - beforeTime;
    sleep = DELAY - timeDiff;

    if (sleep < 0)
    sleep = 2;
    try {
    Thread.sleep(sleep);
    } catch (InterruptedException e) {
    System.out.println("interrupted");
    }
    beforeTime = System.currentTimeMillis();
    }
    gameOver();
    }

    Így gondoltad, ugye?

    4441:
    "Folyt.: A kódban ki az a GA? A Move most viewport (ablak) vagy világ (0-100) koordinátákban számol? Mert egyértelműen az utóbbiban kéne, és csak rajzolásnál konvertálni pixelpozíciókra."

    Itt is valóban nagy gányolást műveltem éjjel, megkavarodtam, hogy most az ellenséges objektumoknak ismerniük kell-e GameArea (GA) méretét. A GameArea a fekete hátterű négyzet. Mikor olvastam fent idézett mondatodat, akkor jöttem rá, hogy hülyeséget csináltam, mert csak a rajzolásnál kell konvertálni pixelpozícióra. Most reggel gyorsan átírtam ilyenre, ez az Enemy0:

    // this method has to be called in every 20 milliseconds
    public void Move () {
    // in even seconds this enemy will go right
    long time = System.currentTimeMillis();
    if ((((time % 10000) - (time % 1000)) / 1000) % 2 == 0) {
    x = (int) (x + 0.3);
    y = (int) (y + 0.1);
    }
    // else it will go left
    else {
    x = (int) (x - 0.3);
    y = (int) (y + 0.1);
    }
    }

    Érdekes, mert most csak balra hajlandó mozogni, aztán egyszer csak megáll, és egy helyben marad. Míg ezt a hszt írtam jöttem rá, hogy az (int)-é konvertálás miatt van a gond. Át fogom írni a koordinátákat double-re, és az int-é konvertálást csak a kirajzolásnál fogom megcsinálni, szerintem ez segíthet.

    Az Enemy2 nagyon szépen cikázik jobbra-balra, pont amiatt, mert egész számot adok neki:
    public void Move () {
    // in even seconds this enemy will go right
    long time = System.currentTimeMillis();
    if ((((time % 10000) - (time % 1000)) / 1000) % 2 == 0) {
    x = (int) (x + 1);
    y = (int) (y + 0.15);
    }
    // else it will go left
    else {
    x = (int) (x - 1);
    y = (int) (y + 0.15);
    }
    }

    A hozzászólásban lévő többi tanácsot köszönöm és megfogadom őket.

    4442:
    Erről egyelőre sejtésem sincs, hogy kéne az általad vázolt duplapufferelést megcsinálni, viszont a GameArea konstruktorában meghívok egy ilyet: setDoubleBuffered(true);

    Mint már említettem az egész GameArea egy gányolás, sok mindent beleírtam este, hogy kipróbálhassam jól mozognak-e az űrhajók. Elküldtem neked privátban az egész osztály forráskódját. A Timeren majd még agyalok.

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

Hirdetés