SagarRawat Ответов: 0

Как остановить мерцание фонового изображения апплета?


Поэтому я добавил фоновое изображение в апплет и теперь всякий раз, когда я пытаюсь запустить его
апплет фоновое изображение начинает мерцать, я добавил еще
изображения и кнопка поверх фона-это то, что вызывает мерцание
или что-то не так с моим кодом?

import java.applet.Applet;
    import java.awt.event.*;
    import java.awt.*;
    import java.awt.Color;

    //<applet code="game" width="500" height="500">

    public class game extends Applet implements Runnable {  //interface for thread

    	int x = 350, y = 10,z=10,n=0;
    	Image bal,a,bg;
    	Boolean flag=true,arr=false;
    	Button b;
    	String str="SCORE : ";
    	Label l;
    	public void start() {
        try 
        { 
            MediaTracker tracker = new MediaTracker (this);
            bg= getImage(getDocumentBase(),"bg.jpg"); //setting background
            tracker.addImage(bg, 0);
        } catch (Exception e) {}
        bg= getImage(getDocumentBase(),"bg.jpg");   //get background
        bal=getImage(getDocumentBase(),"balloon.png");  //get balloon
        a=getImage(getDocumentBase(),"arrow.png"); //get arrow
        new Thread(this).start();
        b=new Button("SHOOT");
        add(b);
        b.addActionListener(new ActionListener(){ //perform this when clicked
        public void actionPerformed(ActionEvent e)
        {
	    arr=true;
        }});
        setSize(500, 500);
        setBackground(Color.white);   
        }
        public void run() {
        while (true) {
           if(arr)
          {
           updates();
          }
           update();
           try {
                Thread.sleep(25);           //making thread sleep
            } catch (InterruptedException ex) {}
            if(z>300)
           {
           	arr=false;
            z=10;
            }
            if(z+70>=x && (y>=200 && y<=300))
                 {
                 	n=n+10;
                    showStatus("HIT!");
      	public void updates(){           //increments the arrow
      	z+=25;
      	repaint();
      	}
      	public void update() {          //increments the balloon
        if(flag)
       		{ y += 6; }
        else
       		{ y -= 6; }                  //decrements the balloon
        if(y>450) flag=false;
        if(y<10) flag=true;
        repaint();
      	}

      	public void paint(Graphics g) {
        	g.drawImage(bg,0,0,500,500,this);
        	g.drawImage(bal,x, y, 75, 75,this);
        	g.drawImage(a,z+10,250,70,50,this);
        	g.drawString(str+n,220,480);
      	}}


Что я уже пробовал:

Я понятия не имею, чем это вызвано..

Richard MacCutchan

Возможно, вы слишком часто или слишком быстро обновляете изображения.

SagarRawat

какие изменения я должен внести в свой код?
А мерцание происходит только тогда, когда есть фоновое изображение.
Спасибо.

Richard MacCutchan

Я все еще думаю, что это частота, с которой вы перекрашиваете экран. Вам нужно проверить, как часто это происходит, и можете ли вы уменьшить это до числа, которое предотвращает мерцание.

SagarRawat

Ну, я думаю, что понял это, я исказил изображение BG до меньшего размера, что вызвало мерцание. Я изменил высоту и ширину апплета на разрешение изображения, и теперь там очень мало мерцаний...
Спасибо за помощь, Тхо.

Gerry Schmitz

Я согласен с Ричардом. У вас есть цикл while, который, вероятно, выполняет избыточные обновления, что вызывает "мерцание" и влияет на производительность (потому что обновления пользовательского интерфейса медленнее, чем общая обработка).

SagarRawat

Ну, я думаю, что понял это, я исказил изображение BG до меньшего размера, что вызвало мерцание. Я изменил высоту и ширину апплета на разрешение изображения, и теперь там очень мало мерцаний...
Спасибо за помощь, Тхо.

0 Ответов