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

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

0

appletviewerがループする。。。

Appletに挑戦しているのですがappletviewerを実行すると、なぜかappletviewerのコマンドの文が永遠に繰り返されます。エクリプスではちゃんと実行されるのを確認したのですが、なぜでしょうか。コンパイルもちゃんとできました。
プログラムはこうなっています。

package animation;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/*<applet code="Animation.class" width="600" height="800">
</applet>*/

public class Animation extends Applet implements Runnable,KeyListener{

    Thread thread=null;    //スレッドを作る
    Dimension size;        //ダブルバッファの準備
    Image back;
    Graphics buffer;

    Image slime,dirt,grassDirt;
    String presskey="";
    int key;
    int x=800,y=470,a=0;

    public void init() {
        System.out.println("init");
        this.setSize(800,600);
        this.setBackground(Color.red);
        slime=getImage(getCodeBase(),"../img/char_m_sl_g.png");//スライムの準備
        dirt=getImage(getCodeBase(),"../img/dirt.png");
        grassDirt=getImage(getCodeBase(),"../img/grass_side.png");
        addKeyListener(this);


        //ダブルバッファの作成
        size=getSize();
        back=createImage(size.width,size.height);
        buffer=back.getGraphics();
        


    }

    public void start() {
        System.out.println("start");
        //スレッドを開始
        thread=new Thread(this);
        thread.start();
    }

    public void stop() {
    }

    public void destroy(){

    }

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

    public void paint(Graphics g){
        int ani=a*23;

        buffer.clearRect(0, 0, 800, 600);//表示されているスライムを削除

        for(int i=0;i<800;i+=32){
            for(int j=0;j<600;j+=32){
                buffer.drawImage(dirt, 0+i, 500+j, 32+i, 532+j, 0, 0, 16, 16, this);
            }
        }

        for(int i=0;i<800;i+=32){
                buffer.drawImage(grassDirt, 0+i, 500, 32+i, 532, 0, 0, 16, 16, this);
        }

        //画像表示する始点xy、終点xy、画像を切り取る始点xy、終点xy
        buffer.drawImage(slime,x,y,x+46,y+32,0+ani,96,23+ani,112,this);
        requestFocusInWindow();

        g.drawImage(back, 0, 0, this);//ダブルバッファを反映
    }


    public void run() {
        boolean bigger=false;
        int t=0;
        while(true){
            if(t%4==0){        //スライムの動きを0.2秒毎にする
            if(a==2){
                a--;
                bigger=false;
            }else if(a==0){
                a++;
                bigger=true;
            }else if(a==1&&bigger){
                a++;
            }else if(a==1&&!bigger){
                a--;
            }
            x-=5;
            }
//        if(key==39){    //プレーヤーが操作するとき用
//            x+=69;
//        }else if (key==37){
//            x-=69;
//        }
//        key=0;
        try{            //作業を0.05秒停止させる
            Thread.sleep(50);
            t++;
        }catch(InterruptedException e){

        }
        repaint();
        }
    }



    @Override
    public void keyTyped(KeyEvent e) {
        // TODO 自動生成されたメソッド・スタブ

    }

    @Override
    public void keyPressed(KeyEvent e) {//押されたボタンを取得
        key=e.getKeyCode();
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }
}

1

回答

100

閲覧

1件の回答

評価

0

自己解決しました。
アプレットビューワーをパッチファイルで起動していたのですが、パッチファイルの名前をappletviewer.batにしていたため、ループしてしまってたみたいです。

回答する

ログインしていません。

ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 アカウントをお持ちでない方は会員登録を行ってください。

ユーザ名匿名