repaint vanuit een andere class

Status
Niet open voor verdere reacties.

stienoo

Gebruiker
Lid geworden
31 dec 2007
Berichten
315
Ik ben een spelletje aan het maken, maar zou om te springen een andere class willen gebruiken (het is een programma dat ik niet zelf heb gemaakt) bij het originele script werd er een select box gebruikt waar gewoon de bounds moesten worden verandert, nu zou ik moeten repaint'en, maar als ik gewoon Bewegen2.repaint(); doe werkt het niet, weet iemand hoe dat wel kan?
 
Ik ben een spelletje aan het maken, maar zou om te springen een andere class willen gebruiken (het is een programma dat ik niet zelf heb gemaakt) bij het originele script werd er een select box gebruikt waar gewoon de bounds moesten worden verandert, nu zou ik moeten repaint'en, maar als ik gewoon Bewegen2.repaint(); doe werkt het niet, weet iemand hoe dat wel kan?

Het zou normaal toch moeten werken op die manier, er zal wel iets anders fout zitten. Post wat code?
 
De code om te springen:

Code:
public class Springen2 extends Thread
{
    public Springen2()
    {
        
    }
    
    public void run()
    {
        if(Bewegen2.jump)
        {
            double v = 10;                  //startsnelheid omhoog         
            double hV = 0;                  //hoogte voor berekening
            double hN = 0;                  //hoogte na berekening
            double m = 50;                //massa, waarde doet er niet toe
            double g = 0.25;                //op aarde 9,81; hoe hoger deze waarde
                                            //hoe lager de sprong
            double eVoor;                   
            int t = 10;                     //duur van één tijdstap
            double vV  = 0;                 //tijdelijke opslag snelheid

            boolean stop = false;

            while(!stop && v != 0)
            {
                eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);

                vV = v;
                hN = hV + v;
                v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
                hV = hN;

                Bewegen2.y = Bewegen2.ynul - (int)hV;
                
                Bewegen2.repaint();

                try
                {
                sleep(t);
                }catch(InterruptedException e){}

                if(!(v > -1))
                    stop = true;
            }


            v = vV;
            while(!(hN <= 0))
            {


                eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);
                hN = hV - v;
                v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
                hV = hN;

                Bewegen2.y = Bewegen2.ynul - (int)hV;

                Bewegen2.repaint();

                try
                {
                sleep(t);
                }catch(InterruptedException e){}
            }

        }
        Bewegen2.jump = false;
    }
}
 
De code om te springen:

Code:
public class Springen2 extends Thread
{
    public Springen2()
    {
        
    }
    
    public void run()
    {
        if(Bewegen2.jump)
        {
            double v = 10;                  //startsnelheid omhoog         
            double hV = 0;                  //hoogte voor berekening
            double hN = 0;                  //hoogte na berekening
            double m = 50;                //massa, waarde doet er niet toe
            double g = 0.25;                //op aarde 9,81; hoe hoger deze waarde
                                            //hoe lager de sprong
            double eVoor;                   
            int t = 10;                     //duur van één tijdstap
            double vV  = 0;                 //tijdelijke opslag snelheid

            boolean stop = false;

            while(!stop && v != 0)
            {
                eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);

                vV = v;
                hN = hV + v;
                v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
                hV = hN;

                Bewegen2.y = Bewegen2.ynul - (int)hV;
                
                Bewegen2.repaint();

                try
                {
                sleep(t);
                }catch(InterruptedException e){}

                if(!(v > -1))
                    stop = true;
            }


            v = vV;
            while(!(hN <= 0))
            {


                eVoor = 0.5*m*(Math.pow(v,2))+(m*g*hV);
                hN = hV - v;
                v = Math.sqrt((eVoor-m*g*hN)/(0.5*m));
                hV = hN;

                Bewegen2.y = Bewegen2.ynul - (int)hV;

                Bewegen2.repaint();

                try
                {
                sleep(t);
                }catch(InterruptedException e){}
            }

        }
        Bewegen2.jump = false;
    }
}

zie op het eerste zicht niet echt een fout. Zet anders voor en na de repaint System.out.println( "BLA" ); ( of gebruik een debugger ). Om te kijken of de functie ooit bereikt wordt..
 
Ow, ja ik had het nog niet uitgevoert, ik werk met eclips.
Nu ik heb heb uitgevoert geeft hij de volgede fout:

Code:
Exception in thread "Thread-3" java.lang.Error: Unresolved compilation problems: 
	Cannot make a static reference to the non-static method repaint() from the type Component
	Cannot make a static reference to the non-static method repaint() from the type Component

	at Springen2.run(Springen2.java:36)
 
Ow, ja ik had het nog niet uitgevoert, ik werk met eclips.
Nu ik heb heb uitgevoert geeft hij de volgede fout:

Code:
Exception in thread "Thread-3" java.lang.Error: Unresolved compilation problems: 
	Cannot make a static reference to the non-static method repaint() from the type Component
	Cannot make a static reference to the non-static method repaint() from the type Component

	at Springen2.run(Springen2.java:36)

laat eens al je code zien. Je doet hier iets verkeerd in een static method. Hoogstwaarschijnlijk je public static void main( String[] args ) { }
 
Arg, kan het aan het fait liggen dat die classe is geschreven voor een aplication en dat ik een applet ben aan het maken?

Als ik mijn code toch moet posten zeg maar.
 
Arg, kan het aan het fait liggen dat die classe is geschreven voor een aplication en dat ik een applet ben aan het maken?

Als ik mijn code toch moet posten zeg maar.

Als je een applet wilt schrijven moet je op z'n minst 1 klasse afleiden van de klasse Applet.
Voor de rest heb ik zelf niet zoveel ervaring met applets maar ik dacht dat de code ongeveer overeen kwam.
 
Ja, je kan van iedere aplicatie een applet maken, maar 1 van de grote verschillen is dat je bij een applet geen main gedeelte hebt.

Bewegen2.java:
Code:
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.applet.*;

public class Bewegen2 extends Applet implements KeyListener{
    public static boolean jump = false;
    public static int x=50;
    public static int y=50;
    public static int ynul=50;
    int lengtex1[] ={0,5};
    int lengtey1[] ={0,5};
    int lengtex2[] ={0,5};
    int lengtey2[] ={0,5};
    int h=20; //hoogte cirkel    
    
    public void init(){
        this.setFocusable(true);
        this.addKeyListener(this);
    }
    public void paint(Graphics g){
        g.fillOval(x,y,h,h);
        g.drawLine(30,30,100,30);
    }
    public void keyTyped(KeyEvent e) {
        //dummy
    }

    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_DOWN){
            y+=2;
            for(int i=30;i<100;i++){
                if((y+h)==30&&x==i){
                    y-=2;
                }
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_UP){
            y-=2;
            for(int i=30;i<100;i++){
                if(y==30&&x==i){
                    y+=2;
                }
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_RIGHT){
            x+=2;/*
            for(int i=30;i<100;i++){
                if(x==i){
                    x-=2;
                }
            }
            */
        }
        if(e.getKeyCode() == KeyEvent.VK_LEFT){
            x-=2;
            for(int i=30;i<100;i++){
                if(y==30&&x==i){
                    x+=2;
                }
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_SPACE){
            if(!jump)
            {
                jump = true;
                new Springen2().start();
            } 
        }
        repaint();
    }

    @Override
    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub
        
    }
}
 
Ja, je kan van iedere aplicatie een applet maken, maar 1 van de
if(e.getKeyCode() == KeyEvent.VK_SPACE){
if(!jump)
{
jump = true;
(new Springen2()).start();
}
}
repaint();
}
[/code]

probeer dit eens ( aanpassing is in het rood. Wat je probeerde was van het object Springen de method start aan te roepen. Terwijl je dit van de instantie moet doen.
 
Heb ik gedaan maar hij geeft nog altijd:
Code:
Exception in thread "Thread-3" java.lang.Error: Unresolved compilation problems: 
	Cannot make a static reference to the non-static method repaint() from the type Component
	Cannot make a static reference to the non-static method repaint() from the type Component

	at Springen2.run(Springen2.java:35)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan