Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

applet制作で質問です。

現在簡単なアーチェリーゲームを作っています。STOPボ
タンを押すとボールが止まりそれが点数加算されていく
というものなのですが、画面がちらつきすぎて困ってい
ます。対処法を教えてください。あと、点数加算をそれ
ぞれの色で止まった点数を加算していきたいのですがど
ういうプログラムにすればよいでしょうか?


import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Graphics;
import java.awt.Graphics2D;


public class p1122100 extends Applet implements 
Runnable,ActionListener{

    Image back;
    Graphics buffer;
    
    
    int x=0,y=0;
    int move_x=5,move_y=6;
    int time = 25;
    int buttonPush=0;
    int score=0;
    
    Button stop;
    Button slow;
    Button midium;
    Button fast;
    
    public void init()
    {
        
        back=createImage(500,500);
        buffer=back.getGraphics();
        Thread th;
        th=new Thread(this);
        th.start();
        
        stop=new Button("はなつ!");
        add(stop);
        stop.addActionListener(this);
        
        slow=new Button("低速");
        add(slow);
        slow.addActionListener(this);
        
        midium=new Button("普通");
        add(midium);
        midium.addActionListener(this);
        
        fast=new Button("高速");
        add(fast);
        fast.addActionListener(this);
        
    }
    
    
    
    public void actionPerformed(ActionEvent e)
{
    
        if(e.getSource() == slow){
            time = 50;
    }
    if(e.getSource() == midium){
            time = 25;
    }
    if(e.getSource() == fast){
            time = 5;
    }
    if (e.getSource() == stop) { 
            time=30000;
            
            
        }    
    }
public void run(){
        
        for(;;){
            x=x+move_x;
            y=y+move_y;
            if(x<0||x>480){
                
                move_x=-move_x;
                
            }
            if(y<0||y>480){
                
                move_y=-move_y;
            }
            repaint();
        try{
                
Thread.sleep(time);
            }
        
        catch(InterruptedException e){}
    }
    }
    public void paint(Graphics g)
    {
        
        Graphics2D g1 = (Graphics2D)g;
        GradientPaint gp = new 
GradientPaint(10,10,Color.RED,100,10,Color.BLUE,tr
ue);
        g1.setPaint(gp);
        g1.fillRect(0, 0, 500, 500);
        
         g.setColor(Color.BLACK);
        Graphics2D buffer = (Graphics2D)g;
        buffer.setStroke(new 
BasicStroke(50.0f));
        buffer.drawOval(125, 125, 240, 240);
        buffer.setColor(Color.yellow);
        buffer.drawString("10点", 155,155);
        
         buffer.setColor(Color.GREEN);
        buffer.setStroke(new 
BasicStroke(40.0f));
        buffer.drawOval(165, 165, 160, 160);
        buffer.setColor(Color.yellow);
        buffer.drawString("20点", 185,185);
        
        buffer.setColor(Color.BLUE);
        buffer.setStroke(new 
BasicStroke(30.0f));
        buffer.drawOval(200, 200, 90, 90);
        buffer.setColor(Color.yellow);
        buffer.drawString("30点", 210,210);
        
        buffer.setColor(Color.RED);
        buffer.setStroke(new 
BasicStroke(20.0f));
        buffer.drawOval(225, 225, 40, 40);
        buffer.setColor(Color.yellow);
        buffer.drawString("50点", 255,255);
        
        buffer.setColor(Color.gray);
        buffer.fillOval(235, 235, 20, 20);
        
        buffer.setColor(Color.red);
        buffer.fillOval(x,y,20,20);
        
        
        
        buffer.setColor(Color.black);
        buffer.drawString("SCORE: "+score, 
420,50);
        g.drawImage(back,0,0,this);
    }
    
    public void update(Graphics g){
        paint(g);
    }
    
}

1

回答

92455

閲覧

1件の回答

評価

0

とりあえず、画像のうち毎回変わらないものは予め作ってお
いてImage化する。
イベント発生時にオフスクリーンへ描いておいて、paint()で
はdrawImage()だけやる。

>点数加算をそれ
>ぞれの色で止まった点数を加算していきたいのですがど
>ういうプログラムにすればよいでしょうか?
アーチェリーなら、中心からの距離でいいんじゃないの。
二点間の距離の求め方は中学校で習ってるだろう。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。