今回は、画像や文字を使ったアニメーションをやってみたいと思います。 プログラムは、前回までに習ったこととほとんど同じです。
1: /** 2: * 車が回るプログラム 3: * 4: * Yoshiaki Matsuzawa 5: * 2003/06/23 6: */ 7: public class RotateCar extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new RotateCar()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: //車を生成する 18: ImageTurtle car = new ImageTurtle("car.gif"); 19: 20: //アニメーションループ 21: while (true) { 22: 23: //待つ 24: sleep(0.1); 25: 26: //処理 27: car.rt(5); 28: 29: //再描画 30: update(); 31: } 32: } 33: 34: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
ImageTurtleクラスを使うと、画像をオブジェクトとして、 タートルのように扱うことができます。
例えば、上記のRotateCar.javaアニメーションで、car.gifを使う場合は、 その2つを同じフォルダに置く必要があります。
同じフォルダに置いていないと画像が表示されません。
使える画像の種類は「.gif」「.jpg」「.jpeg」のどれかです。 「.bmp」の画像は使えないので注意してください。
show(), hide() 命令を使うと、オブジェクトを隠したり、 出現させたりすることができます。
下のプログラムは、車が点滅するプログラムです。
1: /** 2: * 車を点滅させるプログラム 3: * 4: * Yoshiaki Matsuzawa 5: * 2003/06/23 6: */ 7: public class OnAndOffCar extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new OnAndOffCar()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: int i;//ループカウンタ 18: 19: //車を生成する 20: ImageTurtle car = new ImageTurtle("car.gif"); 21: 22: //アニメーションループ 23: i = 0; 24: while (true) { 25: 26: //待つ 27: sleep(0.2); 28: 29: //処理 30: if(i % 2 == 0){//偶数だったら 31: car.show(); 32: }else{//偶数ではなかったら(奇数だったら) 33: car.hide(); 34: } 35: i++; 36: 37: //再描画 38: update(); 39: 40: } 41: } 42: 43: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
画像タートルを使って、青信号は点滅させ、車は前に進め、かざぐるまは回転させるプログラムを作ってください。 画像は以下のものをダウンロードして使ってください。
ブラウザからデスクトップに画像をドラッグドロップすると、デスクトップに画像をダウンロードすることができます。
(プログラムと同じフォルダに置いていないと画像が表示されません。)
(使える画像の種類は「.gif」「.jpg」「.jpeg」のどれかです。 「.bmp」の画像は使えないので注意してください。)
looks(??)命令を使うと、 オブジェクトの見た目を別のオブジェクトのものにすることができます。
例えば、次のプログラムは、 ただじゃんけんのグーチョキパーを表示するだけですが、、、
1: /** 2: * じゃんけんの絵を登場させるプログラム 3: * 4: * 2003/05/08 5: * Yoshiaki Matsuzawa 6: */ 7: public class JankenCharacters extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new JankenCharacters()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: Goo g = new Goo(); 18: Choki c = new Choki(); 19: Paa p = new Paa(); 20: 21: g.warp(100,100); 22: c.warp(200,100); 23: p.warp(300,100); 24: 25: } 26: 27: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
次のように、looks命令を使うと、 グーの見た目をチョキやパーに変えることができます。
1: /** 2: * じゃんけんアニメーションプログラム 3: * 4: * 2003/05/08 5: * Yoshiaki Matsuzawa 6: */ 7: public class JankenAnimation extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new JankenAnimation()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: int i; //ループ用の変数 18: 19: Goo g = new Goo(); 20: Choki c = new Choki(); 21: Paa p = new Paa(); 22: 23: g.warp(100,100); 24: c.warp(200,100); 25: p.warp(300,100); 26: 27: i = 0; 28: while (true) { 29: 30: sleep(0.5); 31: 32: //繰り返した数に応じてグーの見た目を変える 33: if(i % 3 == 0){ 34: g.looks(g); 35: } 36: else if(i % 3 == 1){ 37: g.looks(c); 38: } 39: else{ 40: g.looks(p); 41: } 42: 43: update(); 44: i++; 45: } 46: } 47: 48: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
じゃんけんを応用すると、ぱらぱら漫画の要領で、 人が動作しているようなアニメーションを作ることができます。
1: /** 2: * 人が歩くアニメーションプログラム 3: * 4: * Yoshiaki Matsuzawa 5: * 2003/06/17 6: */ 7: public class WalkingMan extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new WalkingMan()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: int i;//ループカウンタ 18: 19: hide();//亀を消去 20: 21: //アニメーション用画像を用意する 22: ImageTurtle man1 = new ImageTurtle("man1.gif"); 23: ImageTurtle man2 = new ImageTurtle("man2.gif"); 24: ImageTurtle man3 = new ImageTurtle("man3.gif"); 25: ImageTurtle man4 = new ImageTurtle("man4.gif"); 26: ImageTurtle man5 = new ImageTurtle("man5.gif"); 27: ImageTurtle man6 = new ImageTurtle("man6.gif"); 28: ImageTurtle man7 = new ImageTurtle("man7.gif"); 29: ImageTurtle man8 = new ImageTurtle("man8.gif"); 30: 31: //1番以外のアニメーション用画像を消す 32: man2.hide(); 33: man3.hide(); 34: man4.hide(); 35: man5.hide(); 36: man6.hide(); 37: man7.hide(); 38: man8.hide(); 39: 40: //アニメーションループ 41: i = 0; 42: while (true) { 43: 44: // --- 待つ --- 45: sleep(0.1); //0.1秒 46: 47: // --- 処理を行う --- 48: if(i % 8 == 0){ 49: man1.looks(man1); 50: } 51: else if(i % 8 == 1){ 52: man1.looks(man2); 53: } 54: else if(i % 8 == 2){ 55: man1.looks(man3); 56: } 57: else if(i % 8 == 3){ 58: man1.looks(man4); 59: } 60: else if(i % 8 == 4){ 61: man1.looks(man5); 62: } 63: else if(i % 8 == 5){ 64: man1.looks(man6); 65: } 66: else if(i % 8 == 6){ 67: man1.looks(man7); 68: } 69: else if(i % 8 == 7){ 70: man1.looks(man8); 71: } 72: 73: // --- 再描画する --- 74: update(); 75: i++; 76: } 77: 78: } 79: 80: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
このアニメーションでは、次の8枚の画像が使われています。
さらに、背景を付け加えると、動いているように見えます。
1: /** 2: * 人が歩くアニメーションプログラム 3: * (背景付き) 4: * 5: * Yoshiaki Matsuzawa 6: * 2003/06/17 7: */ 8: public class WalkingManWithBg extends Turtle { 9: 10: //起動処理 11: public static void main(String[] args) { 12: Turtle.startTurtle(new WalkingManWithBg()); 13: } 14: 15: //タートルを動かす処理 16: public void start() { 17: 18: //ウインドウを移動, 大きさ調整 19: window.warp(100, 100); 20: window.size(480, 420); 21: 22: int i;//ループカウンタ 23: 24: //座標を取得するための変数 25: int x; 26: int y; 27: 28: hide();//亀を消去 29: 30: //バックグラウンド画像を用意する 31: ImageTurtle bg = new ImageTurtle("bg.jpg"); 32: 33: //アニメーション用画像を用意する 34: ImageTurtle man1 = new ImageTurtle("man1.gif"); 35: ImageTurtle man2 = new ImageTurtle("man2.gif"); 36: ImageTurtle man3 = new ImageTurtle("man3.gif"); 37: ImageTurtle man4 = new ImageTurtle("man4.gif"); 38: ImageTurtle man5 = new ImageTurtle("man5.gif"); 39: ImageTurtle man6 = new ImageTurtle("man6.gif"); 40: ImageTurtle man7 = new ImageTurtle("man7.gif"); 41: ImageTurtle man8 = new ImageTurtle("man8.gif"); 42: 43: //1番を移動 44: man1.warp(240, 240); 45: 46: //1番以外のアニメーション用画像を消す 47: man2.hide(); 48: man3.hide(); 49: man4.hide(); 50: man5.hide(); 51: man6.hide(); 52: man7.hide(); 53: man8.hide(); 54: 55: //アニメーションループ 56: i = 0; 57: while (true) { 58: 59: // --- 待つ --- 60: sleep(0.1); //0.1秒 61: 62: // --- 処理を行う --- 63: //背景を動かす 64: x = bg.getX(); 65: y = bg.getY(); 66: bg.warp(x - 2, y); 67: 68: //人の画像を変える 69: if(i % 8 == 0){ 70: man1.looks(man1); 71: } 72: else if(i % 8 == 1){ 73: man1.looks(man2); 74: } 75: else if(i % 8 == 2){ 76: man1.looks(man3); 77: } 78: else if(i % 8 == 3){ 79: man1.looks(man4); 80: } 81: else if(i % 8 == 4){ 82: man1.looks(man5); 83: } 84: else if(i % 8 == 5){ 85: man1.looks(man6); 86: } 87: else if(i % 8 == 6){ 88: man1.looks(man7); 89: } 90: else if(i % 8 == 7){ 91: man1.looks(man8); 92: } 93: 94: // --- 再描画する --- 95: update(); 96: i++; 97: } 98: 99: } 100: 101: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
オブジェクトは、new命令で作られた順番に、 後ろから重なっていきます。
背景を使うときは、人などの画像よりも先にnewして生成してください。
文字をつくるには、TextTurtleを使います。
1: /** 2: * 「こんにちは」が回るプログラム 3: * 4: * Yoshiaki Matsuzawa 5: * 2003/06/23 6: */ 7: public class RotateText extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new RotateText()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: //こんにちはを生成する 18: TextTurtle hello = new TextTurtle("こんにちは"); 19: 20: //アニメーションループ 21: while (true) { 22: 23: //待つ 24: sleep(0.1); 25: 26: //処理 27: hello.rt(5); 28: 29: //再描画 30: update(); 31: } 32: } 33: 34: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
文字も、「オブジェクト」ですから、タートルや、 画像と同じように扱うことができます。
文字オブジェクトは、 その文字を変化させるための特別な命令、text()を持っています。
1: /** 2: * 繰り返しを数えるカウンター 3: * 4: * Yoshiaki Matsuzawa 5: * 2003/06/23 6: */ 7: public class Counter extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new Counter()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: int i;//ループをカウントする変数 18: 19: //カウンターを生成する 20: TextTurtle counter = new TextTurtle("繰り返し数"); 21: 22: i = 0; 23: //アニメーションループ 24: while (true) { 25: 26: //待つ 27: sleep(0.1); 28: 29: //処理 30: counter.text(i); 31: i++; 32: 33: //再描画 34: update(); 35: } 36: } 37: 38: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
ちなみに、下のプログラムのように、 文字と数字をつなげて、一つの文字にするには、+ 記号でつなげます。
文字列は、「"」で囲みますが、数字(変数)にはつけません。
1: /** 2: * 繰り返しを数えるカウンター 3: * (文字とつなげる版) 4: * 5: * Yoshiaki Matsuzawa 6: * 2003/06/23 7: */ 8: public class Counter2 extends Turtle { 9: 10: //起動処理 11: public static void main(String[] args) { 12: Turtle.startTurtle(new Counter2()); 13: } 14: 15: //タートルを動かす処理 16: public void start() { 17: 18: int i;//ループをカウントする変数 19: 20: //カウンターを生成する 21: TextTurtle counter = new TextTurtle("繰り返し数"); 22: 23: i = 0; 24: //アニメーションループ 25: while (true) { 26: 27: //待つ 28: sleep(0.1); 29: 30: //処理 31: counter.text("現在の繰り返し数は" + i + "です。"); 32: i++; 33: 34: //再描画 35: update(); 36: } 37: } 38: 39: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。
今回習ったことを用いて、楽しいアニメーションを作成してください。
1: /** 2: * アニメーションのサンプル 3: * 4: * 2003/05/08 5: * Yoshiaki Matsuzawa 6: */ 7: public class AnimationSample extends Turtle { 8: 9: //起動処理 10: public static void main(String[] args) { 11: Turtle.startTurtle(new AnimationSample()); 12: } 13: 14: //タートルを動かす処理 15: public void start() { 16: 17: int i; 18: 19: TextTurtle text = new TextTurtle("注目->"); 20: 21: TextTurtle number = new TextTurtle(); 22: number.warp(200, 100); 23: 24: ImageTurtle car = new ImageTurtle("car.gif"); 25: car.hide(); 26: 27: i = 10; 28: while (true) { 29: //待つ 30: sleep(1); 31: 32: //処理 33: number.text(i); 34: 35: if (i == 3) { 36: number.color(java.awt.Color.red); 37: } 38: 39: if (i <= 0) { 40: text.looks(car); 41: number.text("ぼかーん!!"); 42: } 43: 44: i--; 45: 46: //再描画 47: update(); 48: } 49: } 50: 51: }
下のボタンを押すと、このプログラムが実行できます。 ここをクリックすると、プログラムをダウンロードできます。