我有3個關於我的動畫項目的問題。帶有MediaTracker的Java動畫小程序,線程和定時器
- 是對程序正確的結構(見下文)
- 我的第一圖像(從陣列)無法正常運行。有時會彈出,然後消失,然後其他圖像正確顯示。
- 如何控制音頻剪輯何時開始播放。它有時聽起來像是一根針正在翻錄一張唱片...?
,對於程序的結構: 是在正確的順序如下:
在INIT:
- 設置applet的大小。
- 運行帶睡眠時間的計時器任務
- 獲取聲音文件。
- 從陣列中獲取圖像。
- 初始化MediaTracker對象並告訴它「等待所有」圖像。
- 播放聲音文件。
IN START(圖形克) 1.繪製小程序並加載陣列
IN START的第一圖像:, 1.檢查空值的螺紋,如果不爲空,啓動它們
在RUN: 1.再次畫出的小程序: 1.使用變量「iPictureNumber」通過同樣使用重繪和方法的Thread.sleep
更新中按順序的圖像進行迭代。
此代碼是另一個程序的更新版本,我沒有使用線程,所以我不知道這是否是正確的結構。 我的目標是使用這種簡單程序的最佳實踐。如果需要,我可以在壓縮文件中提供圖像和聲音。請提前告知,謝謝。 這裏是代碼:
// Java的動畫與圖像陣列和1個聲音文件的項目中使用線程
import java.net.*;
import java.io.*;
import java.lang.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.applet.Applet;
import java.applet.AudioClip;
import java.util.*;
public class c_TrainAnimation extends Applet implements Runnable
{
Image trainAndBush[];
int totalImages = 17,
currentImage = 0, // Set current image array subscript to 0
sleepTime = 900;
Image imageCurrent; // Set to the matching image in "trainAndBush" Array
MediaTracker myImageTracker;
Timer myTimer;
Thread threadTrainAnimation = new Thread(this);
Thread threadSoundFile = new Thread(this);
AudioClip mySound;
public void init()
{
setSize(400,400);
myTimer = new Timer(true);
myTimer.schedule(new TimerTask()
{
public void run()
{ repaint();}
} // end TimerTask
,0,sleepTime);
mySound = getAudioClip(getDocumentBase(), "onpoint.au");
trainAndBush = new Image[ totalImages ];
// Load the array of images into the Applet when it begins executing
for(int i = 0; i < trainAndBush.length; i++)
{
trainAndBush[i] = getImage(getDocumentBase(),
"Hill" + (i + 1) + ".jpg");
myImageTracker = new MediaTracker(this);
// Give the images an ID number to pass to MediaTracker
myImageTracker.addImage(trainAndBush[i], i);
// Tell MediaTracker to wait until all images are loaded
try
{
myImageTracker.waitForAll();
}
catch(Exception e) {}
mySound.play();
} // end for loop
} // end init
// check threads for null values and then start threads
public void start()
{
if (threadTrainAnimation != null)
threadTrainAnimation.start();
if (threadSoundFile != null)
threadSoundFile.start();
}
// Draw the applet with the first image of the array
public void start(Graphics g)
{
g.drawImage(trainAndBush[0],50,50,300,300, this);
currentImage = 0;
}
// Set "imageCurrent"to appropriate "trainAndBush image" in the array and_
loop through
public void run()
{
int iPictureNumber[] = {0, 1, 2, 3,4,5,6,7,8,9,10,11,12,13,14,15,16};
while(true)
{
for(int i = 0; i < iPictureNumber.length; i++)
{
imageCurrent = trainAndBush[iPictureNumber[i]];
repaint();
try
{
Thread.sleep(sleepTime);
}
catch(InterruptedException e) {}
} // end for loop
} // end while statement
} // end run
public void update(Graphics g)
{
g.drawImage(imageCurrent, 50, 50, 300, 300, this);
}
} // end of Applet
嗨MadProgrammer,感謝您的所有提示。我必須詳細看看您的每條評論,因爲它們對於我在此計劃中的位置有點高級。我還沒有與Swing合作過。也許你建議的讀數會讓它更清晰。再次感謝! – codechick 2012-08-14 00:05:48
不要忘了規則#1 - 玩得開心:) – MadProgrammer 2012-08-14 00:09:44
它運行時很有趣...; d – codechick 2012-08-14 04:23:48