如何制作動(dòng)畫程序
/**
*時(shí)鐘的畫面
*/
publicclassClockCanvasextendsCanvas{
privateClockTimerTasktimerTask;
privateTimertimer;
privatefinalStringIMAGE_PATH=/clock.png;
privatefinalintCLOCK_WIDTH=150;//時(shí)鐘的畫面寬度
privatefinalintCENTER_X=5+CLOCK_WIDTH/2;
privatefinalintCENTER_Y=CLOCK_WIDTH/2;
privatefinalintHOUR_LENGTH=CLOCK_WIDTH/4;//時(shí)鐘的長(zhǎng)度
privatefinalintMINUTE_LENGTH=CLOCK_WIDTH*2/5;//分鐘的長(zhǎng)度
privatefinalintSECOND_LENGTH=CLOCK_WIDTH*2/5;//秒鐘的長(zhǎng)度
privateImageimg;//畫面的背景
/**
*構(gòu)造函數(shù)
*/
publicClockCanvas(){
//設(shè)置timer
timer=newTimer();
timerTask=newClockTimerTask(this);
timer.schedule(timerTask,1000,1000);
//登陸背景畫面
try{
img=Image.createImage(IMAGE_PATH);
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*畫時(shí)鐘
*/
protectedvoidpaint(Graphicsg){
//背景的設(shè)置
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());
g.drawImage(img,5,0,Graphics.TOP|Graphics.LEFT);
//獲得時(shí)間
Calendarcal=Calendar.getInstance();
inthour=(int)cal.get(Calendar.HOUR);
inthour_of_day=(int)cal.get(Calendar.HOUR_OF_DAY);
intminute=(int)cal.get(Calendar.MINUTE);
intsecond=(int)cal.get(Calendar.SECOND);
intyear=(int)cal.get(Calendar.YEAR);
intmonth=(int)cal.get(Calendar.MONTH)+1;
intday=(int)cal.get(Calendar.DAY_OF_MONTH);
//顯示時(shí)間
g.setColor(0,0,200);
StringdateString=year+/+month+/+day++hour_of_day+:+minute+:+second;
g.drawString(dateString,CENTER_X,getHeight()-25,Graphics.TOP|Graphics.HCENTER);
//時(shí)鐘時(shí)針的顯示
g.setColor(100,100,100);
inthourAngle=360-30*hour+90;
if(hourAngle>=360)hourAngle-=360;
inthourX=CENTER_X+TrigonometricFunctions.COS[hourAngle]*HOUR_LENGTH/TrigonometricFunctions.MULTIPLE;
inthourY=CENTER_Y-TrigonometricFunctions.SIN[hourAngle]*HOUR_LENGTH/TrigonometricFunctions.MULTIPLE;
//描繪時(shí)針
for(inti=-2;i3;i++){
g.drawLine(CENTER_X+i,CENTER_Y+i,hourX,hourY);
g.drawLine(CENTER_X-i,CENTER_Y+i,hourX,hourY);
}
//分針的顯示
intminuteAngle=360-6*minute+90;
if(minuteAngle>=360)minuteAngle-=360;
intminuteX=CENTER_X+TrigonometricFunctions.COS[minuteAngle]*MINUTE_LENGTH/TrigonometricFunctions.MULTIPLE;
intminuteY=CENTER_Y-TrigonometricFunctions.SIN[minuteAngle]*MINUTE_LENGTH/TrigonometricFunctions.MULTIPLE;//j`
//畫分針的范圍
for(inti=-2;i3;i++){
g.drawLine(CENTER_X+i,CENTER_Y+i,minuteX,minuteY);
g.drawLine(CENTER_X-i,CENTER_Y+i,minuteX,minuteY);
}
//秒針的顯示
intsecondAngle=360-6*second+90;
if(secondAngle>=360)secondAngle-=360;
intsecondX=CENTER_X+TrigonometricFunctions.COS[secondAngle]*SECOND_LENGTH/TrigonometricFunctions.MULTIPLE;
intsecondY=CENTER_Y-TrigonometricFunctions.SIN[secondAngle]*SECOND_LENGTH/TrigonometricFunctions.MULTIPLE;
g.drawLine(CENTER_X,CENTER_Y,secondX,secondY);
}
}
Figure6
4-3-4
擴(kuò)展函數(shù)
在本講中制作的模擬表應(yīng)用程序是實(shí)現(xiàn)了表的最小功能的示范應(yīng)用程序。在本應(yīng)用程序中,也可以自己增加鬧鐘和跑秒等擴(kuò)展功能,這些自己都嘗試一番哦。
4-4總結(jié)
在本講中我們講述了制作動(dòng)畫應(yīng)用程序的具體方法。使用動(dòng)畫,就要對(duì)畫像賦予動(dòng)感,這比游戲還要復(fù)雜,所以應(yīng)該能夠制作圖表應(yīng)用程序。要運(yùn)行動(dòng)畫,線據(jù)和秒表是不可缺少的基本技術(shù),但是線據(jù)知識(shí)是一門深?yuàn)W的技術(shù)。參照本講中的樣品,加深線據(jù)方面的知識(shí),就能夠制作成不錯(cuò)的應(yīng)用程序。在下一講中,我們將就效果音和BGM、聲音等技術(shù)進(jìn)行詳細(xì)講解。敬請(qǐng)關(guān)注!
4-3-4完成
以下是所制作的程序的源碼。
評(píng)論