2017-04-18 4 views
-1

Ich arbeite an einem Applet-Projekt für meine Informatik-Klasse, und ich bin fast fertig, aber als ich meine letzten Test-Compiles begann, erscheint mein Charakter für meine Verzögerung von 2500 Millisekunden, wie es eingestellt ist, aber der Text ich hinzugefügt wird nicht angezeigt. Nach der Verzögerung von 2500 Millisekunden verschwinden sowohl das Zeichen als auch der Text und es werden nur die Hintergründe angezeigt, die ich gemacht habe.Mein Bild und Text verschwinden immer weiter?

Hier ist mein Code:

import java.applet.Applet; 

import java.awt.*; 

import java.awt.event.*; 

import java.awt.geom.*; 

import java.awt.geom.Ellipse2D; 

import java.util.*; 

import javax.imageio.ImageIO; 

import java.net.URL; 

public class Vampis_Adventure extends Applet implements Runnable 
{ 
private Thread t; 
private Graphics page; 

public int gh64 = (getHeight()-64); 
public int gw56 = (getWidth()-56); 

public void init() 
{ 
    Thread t = new Thread(this); 
    t.start(); 
} 

public void run() 
{ 
} 

public void paint(Graphics p) 
{ 
    page = p; 
    drawBackground(page); 
    drawVampi(page,0,(getHeight()-64)); 
    scene2(page); 
    scene3(page); 
    scene4(page); 
} 

public void drawVampi(Graphics page, int x, int y) 
{ 
    Image vampi = null; 
    try 
    { 
     URL url = getClass().getResource("images/Vampi.png"); 
     vampi = ImageIO.read(url); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 
    page.drawImage(vampi,x,y,56,64,null); 
} 

public void drawVampiOW(Graphics page, int x, int y) 
{ 
    Image vampiOW = null; 
    try 
    { 
     URL url = getClass().getResource("images/VampiOW.png"); 
     vampiOW = ImageIO.read(url); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 
    page.drawImage(vampiOW,x,y,56,64,null); 
} 

public void drawVampiTalking(Graphics page) 
{ 
    drawVampi(page,0,gh64); 
    String V_Text1 = "Hey there! I'm Vampi!"; 
    String V_Text2 = "Let's adventure!"; 
    page.drawString(V_Text1,56,gh64); 
    myDelay(2500); 
    drawBackground(page); 
    drawVampi(page,0,gh64); 
    page.drawString(V_Text2,56,gh64); 
    myDelay(2500); 
    drawVampiOW(page,0,gh64); 
    myDelay(50); 
} 

public void scene2(Graphics page) 
{ 
    drawBackground2(page); 
    drawVampiOW(page,gw56,gh64); 
    String V_Text3 = "Huh, a desert."; 
    String V_Text4 = "Maybe there's a temple?"; 
    page.drawString(V_Text3,(getWidth()-150),gh64); 
    myDelay(2500); 
    drawBackground2(page); 
    drawVampiOW(page,gw56,gh64); 
    page.drawString(V_Text4,(getWidth()-150),gh64); 
    myDelay(2500); 
    for(int move = gh64; move>=0; move-=10) 
    { 
     drawBackground2(page); 
     drawVampiOW(page,move,gh64); 
     myDelay(50); 
    } 
} 

public void scene3(Graphics page) 
{ 
    drawBackground2(page); 
    int xPoints[] = {0,30,60}; 
    int yPoints[] = {getHeight(), (getHeight()/2), getHeight()}; 
    int numPoints = 3; 
    page.drawPolygon(xPoints, yPoints, numPoints); 
    drawVampiOW(page,gw56,gh64); 
    String V_Text5 = "Well, what do ya know?"; 
    String V_Text6 = "It's a temple!"; 
    String V_Text7 = "Let's go in!"; 
    page.drawString(V_Text5,(getWidth()-150),gh64); 
    myDelay(2500); 
    drawBackground2(page); 
    page.drawPolygon(xPoints, yPoints, numPoints); 
    drawVampiOW(page,gw56,gh64); 
    page.drawString(V_Text6,(getWidth()-150),gh64); 
    myDelay(2500); 
    drawBackground2(page); 
    page.drawPolygon(xPoints, yPoints, numPoints); 
    drawVampiOW(page,gw56,gh64); 
    page.drawString(V_Text7,(getWidth()-150),gh64); 
    myDelay(2500); 
    for(int move2 = gh64; move2>=0; move2-=10) 
    { 
     drawBackground2(page); 
     drawVampiOW(page,move2,gh64); 
     myDelay(50); 
    } 
} 

public void scene4(Graphics page) 
{ 
    drawBackground3(page); 
    drawVampi(page,56,gh64); 
    String V_Text8 = "Wow, an ancient sword?"; 
    String V_Text9 = "I'm gonna try and pull it out."; 
    page.drawString(V_Text8,(getWidth()-150),gh64); 
    myDelay(2500); 
    drawBackground3(page); 
    drawVampi(page,0,gh64); 
    page.drawString(V_Text9,(getWidth()-150),gh64); 
    myDelay(2500); 
    for(int move3 = 0; move3<=gh64; move3+=10) 
    { 
     drawBackground2(page); 
     drawVampi(page,move3,gh64); 
     myDelay(50); 
    } 
} 

public void drawSwordInStone(Graphics page,int x, int y) 
{ 
    Image swordinstone = null; 
    try 
    { 
     URL url = getClass().getResource("images/SwordInStone.png"); 
     swordinstone = ImageIO.read(url); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 
    page.drawImage(swordinstone,x,y,110,57,null); 
} 

public void drawBackground(Graphics page) 
{ 
    page.setColor(new Color(0x87ceeb)); 
    page.fillRect(0,0,getWidth(),getHeight()); 
    page.setColor(new Color(0x56b000)); 
    page.fillRect(0,(getHeight()-(getHeight()/3)),getWidth(),(getHeight()/3)); 
    page.setColor(Color.yellow); 
    page.fillOval(-50,-50,100,100); 
    page.setColor(Color.white); 
} 

public void drawBackground2(Graphics page) 
{ 
    page.setColor(new Color(0x87ceeb)); 
    page.fillRect(0,0,getWidth(),getHeight()); 
    page.setColor(new Color(0xdbd1b4)); 
    page.fillRect(0,(getHeight()-(getHeight()/3)),getWidth(),(getHeight()/3)); 
    page.setColor(Color.yellow); 
    page.fillOval(-50,-50,100,100); 
    page.setColor(Color.white); 
} 

public void drawBackground3(Graphics page) 
{ 
    page.setColor(new Color(0x897741)); 
    page.fillRect(0,0,getWidth(),getHeight()); 
    page.setColor(new Color(0xa48e4e)); 
    page.fillRect(0,(getHeight()-(getHeight()/3)),getWidth(),(getHeight()/3)); 
    drawSwordInStone(page,(getWidth()-110),(getHeight()-60)); 
    page.setColor(Color.white); 
} 


private void myDelay(int delay) 
{ 
    try 
    { 
     t.sleep(delay); 
    } 
    catch(InterruptedException e) 
    { 
     //no action :V 
    } 
} 
} 

EDIT: Ich habe vergessen, in meiner früheren Erklärung zu erwähnen, die wir sind Animation in das Applet zu implementieren.

Antwort

0

Sie sollten niemals den Sleep (den Sie in Ihrer Verzögerungsmethode aufrufen) auf dem Event Dispatch Thread (EDT) aufrufen, dem Thread, der zum (erneuten) Malen verwendet wird. Und Sie sollten nie versuchen, Animationen in Ihrer Malmethode zu erstellen, da die Komponente jederzeit neu gezeichnet werden kann (jedes Mal, wenn das Fenster in der Größe geändert wird, usw.). Verwenden Sie stattdessen einen anderen Thread oder wechseln Sie zu Swing und verwenden Sie javax.swing. Timer

Es zeigt den Text nicht, weil Sie über den gesamten Hintergrund zeichnen, wenn Sie drawBackgroundX nennen

auch Sie können Cardlayout und die Verwendung mehrerer Platten zu prüfen, jede Szene zu zeigen.

+0

Aufgrund meines Fehlwissens habe ich nachgeschlagen, wie man CardLayout in einem Applet benutzt. Ich betone, dass es Tasten verwendet, um zur nächsten Karte zu gehen, wenn das Projekt, das ich verwende, eine Animation benötigt. Gibt es eine andere Möglichkeit, Animation in ein Applet zu stellen, darf ich fragen? –

+0

Sie können programmatisch die erste, letzte, nächste und vorherige Karte verwenden, um die gewünschte Karte auszuwählen – ControlAltDel

Verwandte Themen