Avatar billede svuppenator Nybegynder
25. oktober 2001 - 14:05 Der er 3 kommentarer og
1 løsning

Grafik problemer! Tegner ikke noget

Myello
Har et problem med min grafik.
Jeg har en firkant(fly) som skal tegnes og flyttes, nu er det bare sådan at der bliver ikek tegnet noget på skærmen og jeg får en stackoverflow exception så snart jeg trykker på en pil tast.
KODE
------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import java.io.*;

//Vores Flyver!!
class fly
{
    private int x;
    private int y;
    private int b;
    private int h;
   
    public fly(int x, int y, int b, int h)
    {this.x=x;this.y=y;this.b=b;this.h=h;}
    public void tegn(Graphics g,int hor, int ver)// Tegner vores \"seje\" fly!
    {
        g.setColor(Color.lightGray);
        g.fillRect(ver,hor,b,h);
        g.drawRect(ver,hor,b,h);
       
    }
}
public class falcon extends Frame implements KeyListener
{
    final public int maxsteps = 2;
    final public int antalkeys = 7; //antal knapper der skal bruges til at spille med
    final public int antalSpil = 1; // Bruges til at diffinerer start stedet for spilleren!
    public boolean key[] = new boolean[antalkeys]; //en tabel over de keys der bruges
    public int xPos[] = new int[antalSpil]; //får x positionen for spiller 1
    public int yPos[] = new int[antalSpil]; //får y positionen for spiller 1
    public int face[] = new int[antalSpil]; //animation af spiller i den pågældende retning
    public boolean moving[] = new boolean[antalSpil];
    fly f = new fly(320,430,50,50);
    public falcon()
    {
        super(\"Fighting Falcon\");
        setSize(640, 480);
    addWindowListener(new CloseCatcher ());
        addKeyListener(this);
    show();
        for (int i = 0;i < antalSpil; ++i) //Starte stedet for vores spiller
        {
            xPos[i] = 430;
            yPos[i] = 320;
        }
        for (int i = 0;i < antalkeys; ++i) //Løber vores tabel af keys igennem
        {
            key[i] = false; //Sætter dem til default fra starten af for vi har jo ikke trykket på nogen endnu
        }
    }
    public void gameloop()//Skulle gerne starte spillet
    {
        repaint();
        while(true)
        {
          moving(xPos[0], yPos[0], face[0]);
          buttonpres();
        }
       
    }
    public void moving(int x, int y, int f)//Flytter vores Fly   
    {
        switch(f)
        {
            case 1: //frem
            {
                y=y-maxsteps;
                break;
            }
            case 2: //tilbage
            {
                y=y+maxsteps;
                break;
            }
            case 3://venstre
            {
                x=x-maxsteps;
                break;   
            }
            case 4://højre
            {
                x=x+maxsteps;
                break;
            }
        }
    }
    public void buttonpres() //Flytter vores spiller med de taster der er trykket ned
    {
        if(key[0])//frem
        {
            yPos[0] = yPos[0] - maxsteps;
            face[0] = 1;
            repaint();
        }
        if(key[1])//tilbage
        {
            yPos[0] = yPos[0] + maxsteps;
            face[0] = 1;
            repaint();
        }
        if(key[2])//venstre
        {
            xPos[0] = xPos[0] - maxsteps;
            face[0] = 1;
            repaint();
        }
        if(key[3])//højre
        {
            xPos[0] = xPos[0] + maxsteps;
            face[0] = 1;
            repaint();
        }
        if(key[0]&&key[2])//Nordvest
        {
            yPos[0] = yPos[0] - maxsteps;
            xPos[0] = xPos[0] - maxsteps;
            face[0] = 1;
            repaint();
        }
        if(key[0]&&key[3])//NordØst
        {
            yPos[0] = yPos[0] - maxsteps;
            xPos[0] = xPos[0] + maxsteps;
            face[0] = 1;
            repaint();
        }
        if(key[1]&&key[2])//SydVest
        {
            yPos[0] = yPos[0] + maxsteps;
            xPos[0] = xPos[0] - maxsteps;
            face[0] = 1;
            repaint();
        }
        if(key[1]&&key[3])//SydØst
        {
            yPos[0] = yPos[0] + maxsteps;
            xPos[0] = xPos[0] + maxsteps;
            face[0] = 1;
            repaint();
        }
    }
    public void paint(Graphics g) //Skulle tegne
    {
        switch (face[0]) {
            case 1: //Opad
            {
                f.tegn(g,xPos[0],yPos[0]);
                break;
            }
            case 2: //Nedad
            {
                f.tegn(g,xPos[0],yPos[0]);
                break;
            }
            case 3: //venstre
            {
                f.tegn(g,xPos[0],yPos[0]);
                break;
            }
            case 4: //højre
            {
                f.tegn(g,xPos[0],yPos[0]);
                break;
            }
        }
        paint(g);
    }
   
    public static void main(String args[])
    {
        new falcon().gameloop();
    }
   
    public void keyPressed(KeyEvent ke) //Tester på om vi har trykket på en tast
    {
        if(ke.getKeyCode()==ke.VK_UP)//frem
        {
            key[0] = true;
            key[1] = false;
            key[2] = false;
            key[3] = false;
            key[4] = false;
            key[5] = false;
            key[6] = false;
        }
        if(ke.getKeyCode()==ke.VK_DOWN)//tilbage
        {
            key[0] = false;
            key[1] = true;
            key[2] = false;
            key[3] = false;
            key[4] = false;
            key[5] = false;
            key[6] = false;
        }
        if(ke.getKeyCode()==ke.VK_LEFT)//venstrer
        {
            key[0] = false;
            key[1] = false;
            key[2] = true;
            key[3] = false;
            key[4] = false;
            key[5] = false;
            key[6] = false;
        }
        if(ke.getKeyCode()==ke.VK_RIGHT)//højre
        {
            key[0] = false;
            key[1] = false;
            key[2] = false;
            key[3] = true;
            key[4] = false;
            key[5] = false;
            key[6] = false;
        }
        if(ke.getKeyCode()==ke.VK_CONTROL)//SKYD!!
        {
            key[0] = false;
            key[1] = false;
            key[2] = false;
            key[3] = false;
            key[4] = true;
            key[5] = false;
            key[6] = false;
        }
        if(ke.getKeyCode()==ke.VK_ALT)//Skifte Våben
        {
            key[0] = false;
            key[1] = false;
            key[2] = false;
            key[3] = false;
            key[4] = false;
            key[5] = true;
            key[6] = false;
        }
        if(ke.getKeyCode()==ke.VK_SPACE)//Aktiverer special Udstyr
        {
            key[0] = false;
            key[1] = false;
            key[2] = false;
            key[3] = false;
            key[4] = false;
            key[5] = false;
            key[6] = true;
        }
    }
   
    public void keyReleased(java.awt.event.KeyEvent keyEvent) {
    }
   
    public void keyTyped(java.awt.event.KeyEvent keyEvent) {
    }
   
}
class CloseCatcher extends WindowAdapter
{public void windowClosing(WindowEvent e){System.exit(0);}}
------------------------------------------------------
Avatar billede logical Nybegynder
25. oktober 2001 - 17:15 #1
I jeres paint metode kalder i paint(g) et stykke der nede (efter jeres switch)

Ret det til super.paint(g)
Avatar billede svuppenator Nybegynder
26. oktober 2001 - 09:03 #2
ok... det vidste jeg ikke man kunne...
Avatar billede svuppenator Nybegynder
26. oktober 2001 - 12:28 #3
Nu vi er her.. vil jeg gerne vide hvorfor den flytter sig så vildt hurtigt... man ikke rigtig styre firkanten rundt som man har lyst til... den farer forvildet rundt...
Avatar billede svuppenator Nybegynder
26. oktober 2001 - 12:30 #4
og for at få den den til at gå skrå er det forkert at gøre sådan eller hvad? synes ikke at det virker helt som det skal...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester