[ Stranger2 @ 02.09.2007. 15:00 ] @
Ne pravim igru ali mi treba slična stvar. Jedan objekat treba da se kreće po ekranu i pri tome reaguje na nekoliko okolnosti na koje se upravlja pritiskom na tastere. Sve treba da izgleda tečno kao film da nema trzanja i da se brzina objekta ne menja bez obzira na složenost frejma i na snagu kompjutera...
Probavao sam da smislim nekoliko načina ali imam osećaj da se to radi drugačije. Pretpostavljam da developeri igara već imaju nekoliko uhodanih metoda. Da li neko od prgramera može da mi objasni teoretski kako treba da ide tok programa za animaciju u video igri? Ako ima više metoda volio biha da čujem pa da vidim šta će odgovarati za moje potrebe.
[ lammas @ 03.10.2007. 16:54 ] @
Ja mogu da ti pomognem,samo u jeziku Java,evo ti kod za jednu animaciju
Code:

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Color;

public class Neko extends java.applet.Applet
    implements Runnable {

    Image nekoPics[] = new Image[9];
    Image currentImg;
    Thread runner;
    int x;
    int y = 50;

    public void init() {
        String nekoSrc[] = { "right1.gif", "right2.gif",
            "stop.gif", "yawn.gif", "scratch1.gif",
            "scratch2.gif","sleep1.gif", "sleep2.gif",
            "awake.gif" };

        for (int i=0; i < nekoPics.length; i++) {
            nekoPics[i] = getImage(getCodeBase(),
                "images/" + nekoSrc[i]);
        }
    }

    public void start() {
        if (runner == null) {
            runner = new Thread(this);
            runner.start();
        }
    }

    public void stop() {
        runner = null;
    }

    public void run() {
        setBackground(Color.white);
        // run from one side of the screen to the middle
        nekoRun(0, size().width / 2);
        // stop and pause
        currentImg = nekoPics[2];
        repaint();
        pause(1000);
        // yawn
        currentImg = nekoPics[3];
        repaint();
        pause(1000);
        // scratch four times
        nekoScratch(4);
        // sleep for 5 "turns"
        nekoSleep(5);
        // wake up and run off
        currentImg = nekoPics[8];
        repaint();
        pause(500);
        nekoRun(x, size().width + 10);
    }

    void nekoRun(int start, int end) {
        for (int i = start; i < end; i += 10) {
            x = i;
            // swap images
            if (currentImg == nekoPics[0])
                currentImg = nekoPics[1];
            else currentImg = nekoPics[0];
            repaint();
            pause(150);
        }
    }

    void nekoScratch(int numTimes) {
        for (int i = numTimes; i > 0; i--) {
            currentImg = nekoPics[4];
            repaint();
            pause(150);
            currentImg = nekoPics[5];
            repaint();
            pause(150);
        }
    }

    void nekoSleep(int numTimes) {
        for (int i = numTimes; i > 0; i--) {
            currentImg = nekoPics[6];
            repaint();
            pause(250);
            currentImg = nekoPics[7];
            repaint();
            pause(250);
        }
    }

    void pause(int time) {
        try {
            Thread.sleep(time);
        } catch (InterruptedException e) { }
    }

    public void paint(Graphics screen) {
        if (currentImg != null)
            screen.drawImage(currentImg, x, y, this);
    }
}
[ tosa @ 04.10.2007. 04:41 ] @
Citat:
Stranger2: Sve treba da izgleda tečno kao film da nema trzanja i da se brzina objekta ne menja bez obzira na složenost frejma i na snagu kompjutera...

Kad ovo završiš, javi i nama, svi bi voleli da znamo - ako ne patentiraš pre toga, naravno :)
[ StefanJer91 @ 04.10.2007. 08:18 ] @
Citat:
Stranger2: Da li neko od prgramera može da mi objasni teoretski kako treba da ide tok programa za animaciju u video igri? Ako ima više metoda volio biha da čujem pa da vidim šta će odgovarati za moje potrebe.


Da, ima vise metoda, ja cu da ti objasnim kako ja radim: Umesto veceg broja slika koje bi prestavljale animaciju, koristim jednu na kojoj se na istoj udaljenosti nalaze sve manje slike. Napravim funkciju koja ce u zavisnosti od parametra velicine pravougaonika koji sam joj prosledio da vraca sledeci sprite. Sad jedino jos namestis da se taj pomeraj vrsi u odredjenom vremenskom periodu (npr. svaka nova slika na 0.3 sec). Nadam se da si razumeo...