Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

Nanven

Java question

This topic is 5420 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I''m trying to use images and sound, and I know what''s wrong. Everytime I change the screen paint gets called again and so it ends up doing this three times. My question is, how can I get it so in an applet, it only runs code once. Here''s what I got right now"
package maladorintro;

import java.awt.*;
import javax.swing.JApplet;
import javax.swing.JOptionPane;
import java.applet.AudioClip;

public class intro extends JApplet {
  int appWidth=450;
  int appHeight=600;
  Image logo;
  AudioClip sound;
  Font myFont=new Font("Serif",Font.BOLD,30); //Create new font for text


  public void init() {
    //Load images and sound

    logo=getImage(getCodeBase(),"malador.jpg");
    sound=getAudioClip(getCodeBase(),"wind.WAV");
  }

  public void intro(Graphics g) {
    //Play sound

    sound.play();

    //Set background

    g.fillRect(0,0,appWidth,appHeight);

    //Set the text to red and change the font

    g.setColor(Color.RED);
    g.setFont(myFont);

    //Draw the text

    g.drawString("Malador",(appWidth/2)-45,(appHeight/2));

    //Pause

    try {
      Thread.sleep(2000);
    }
    catch(Exception e) {
        System.out.println(e);
    }

    //Display the image

    g.drawImage(logo,0,0,appWidth,appHeight,this);
  }

  public void paint(Graphics g) {
    intro(g);
  }

}
I only want the code to run once. However I need a graphics object thats initialized and thats the only reason I have a paint function. Is there a better way?

Share this post


Link to post
Share on other sites
Advertisement
Simplest solution - create a boolean member and initialize it to false. In intro, set it to true. In paint, only call intro if it is false.

Share this post


Link to post
Share on other sites

I am not 100% sure what you mean here, so maybe I misunderstand you but it sounds like you only want that intro(g) is called once, right?

Then you just add one more variable, boolean for example and set it to either true or false indicating if intro is run or not....

declaration:

boolean bRunIntro;


Inside init:

bRunIntro = true;

In paint

if (bRunIntro) {
bRunIntro = false;
intro(g);
}

Share this post


Link to post
Share on other sites
That will prevent the applet from redrawing itself.

A better way would be to have an image object that holds the final graphics (red background, Malador text and logo). Like this:

package maladorintro;

import java.awt.*;
import java.awt.image.*;
import javax.swing.JApplet;
import javax.swing.JOptionPane;
import java.applet.AudioClip;

public class intro extends JApplet {
int appWidth=450;
int appHeight=600;
Image logo;
Image applet = null;
AudioClip sound;
Font myFont=new Font("Serif",Font.BOLD,30); //Create new font for text


public void init() {
//Load images and sound

logo=getImage(getCodeBase(),"malador.jpg");
sound=getAudioClip(getCodeBase(),"wind.WAV");
}

public void intro(Graphics g) {
if (applet == null)
{
// Create new image

applet = new BufferedImage(appWidth, appHeight,
BufferedImage.TYPE_INT_RGB);
Graphics graph = applet.createGraphics();

//Play sound

sound.play();

//Set background

graph.fillRect(0,0,appWidth,appHeight);

//Set the text to red and change the font

graph.setColor(Color.RED);
graph.setFont(myFont);

//Draw the text

graph.drawString("Malador",(appWidth/2)-45,(appHeight/2));

// Draw image

g.drawImage(applet, 0, 0, appWidth, appHeight, this);

//Pause

try {
Thread.sleep(2000);
}
catch(Exception e) {
System.out.println(e);
}

//Display the image

graph.drawImage(logo,0,0,appWidth,appHeight,this);
g.drawImage(applet, 0, 0, appWidth, appHeight, this);
}
else
{
g.drawImage(applet, 0, 0, appWidth, appHeight, this);
}
}

public void paint(Graphics g) {
intro(g);
}
}

This way, your applet is kind of double buffered and multiple calls to paint() shouldn''t bother you anymore.

- Christoph

---
Teamwork Software - Stuff That Does Something

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!