アプリ版:「スタンプのみでお礼する」機能のリリースについて

ボールを左から右に動かすようなプログラムを組んだのですがスレッドの部分がうまく動いてくれません。プログラムは下のものなのですがどこがいけないのでしょうか。教えてください。

import javax.swing.*;
import java.awt.*;

public class SampleBall extends JFrame implements Runnable{
SmapleCanvas samplecanvas;
Image image=null;
Graphics offg=null;
int x1,y1=60;

public SampleBall(){
super("Ball");
setSize(500,360);
setDefaultCloseOperation(EXIT_ON_CLOSE);
samplecanvas=new SmapleCanvas();
samplecanvas.setBounds(0,0,500,360);
getContentPane().add(samplecanvas);
}
public static void main(String args[]){
new SampleBall().show();
Thread b1=new Thread();
b1.start();
}
public void run(){
try{
x1=40;
while(true){
x1=x1+10;
if(x1>=500){
x1=10;
}
samplecanvas.repaint();
}
}catch(Exception e){
System.out.println(e);
}
}
class SmapleCanvas extends Canvas{
public void paint(Graphics g){
if(image==null){
image=createImage(500,360);
offg=image.getGraphics();
offg.setColor(Color.white);
offg.fillRect(0,0,500,360);
}
else{
offg.setColor(Color.white);
offg.fillRect(0,0,500,360);
g.drawImage(image,0,0,this);
}
offg.setColor(Color.blue);
offg.fillOval(x1,y1,10,10);
g.drawImage(image,0,0,this);
}
}
}

A 回答 (2件)

shuncillinさん、こんにちは。



mainメソッドでスレッドを生成してstartしていますが、SampleBallのスレッドをスタートすることように設定していません。
以下のようにすれば、とりあえず動作します。

SampleBall s = null;
Thread b1 = null;
s = new SampleBall();
b1 = new Thread(s);
b1.start();
s.show();

画面のちらつきが残りますが、とりあえず。
    • good
    • 0
この回答へのお礼

ありがとうございます。画面はちらつきますができました。ちらつきは、ダブルバッファリングを使えばいいと本に書いてありダブルバッファリングを使ったのですが、なぜこんなにちらつくのでしょうか。聞いてばかりで悪いのですが、教えてもらえるとうれしいです。

お礼日時:2003/06/15 17:25

shuncillinさん、ダブルバッファリングはできたものとして回答します。


ちらつきは言ってしまえば、画面への(再)描画はものすごく時間のかかる処理のために発声します。。
ディスプレイの能力以上、全体を描画し直しながら表示、全体を描画し直しながら表示と命令が入り、描ききれないうちに次の状態ということを繰り返すためにちらつくのです。
そこで、こんな状態を防ぐには、
再描画する範囲を小さくするというのがありますが、これはなかなか難しいですね。
そこで、あらかじめ描画する内容を決めてあげて、それを表示とディスプレイの負担を表示だけにすれば、ちらつきは軽減できます。これがダブルバッファリングですね。
より詳しく知りたければ、検索サイトで「java ダブルバッファリング」をキーに検索すれば、有意義な情報を拾えるでしょう。

参考URL:http://www.google.com/search?q=%E3%83%80%E3%83%9 …
    • good
    • 0
この回答へのお礼

ありがとうございます。ボールの速度を落とすことでちらつきは良くなりました。

お礼日時:2003/06/15 19:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!