如何制作动画程序
unctions.COS[secondAngle]*SECOND_LENGTH/10000;
intsecondY=CENTER_Y-TrigonometricFunctions.SIN[secondAngle]*SECOND_LENGTH/10000;
g.drawLine(CENTER_X,CENTER_Y,secondX,secondY);
ex.9
下面是ClockCanvas类的源码。画面上有表的中心坐标。
importjava.util.*;
importjavax.microedition.lcdui.*;
/**
*时钟的画面
*/
publicclassClockCanvasextendsCanvas{
privateClockTimerTasktimerTask;
privateTimertimer;
privatefinalStringIMAGE_PATH=/clock.png;
privatefinalintCLOCK_WIDTH=150;//时钟的画面宽度
privatefinalintCENTER_X=5+CLOCK_WIDTH/2;
privatefinalintCENTER_Y=CLOCK_WIDTH/2;
privatefinalintHOUR_LENGTH=CLOCK_WIDTH/4;//时钟的长度
privatefinalintMINUTE_LENGTH=CLOCK_WIDTH*2/5;//分钟的长度
privatefinalintSECOND_LENGTH=CLOCK_WIDTH*2/5;//秒钟的长度
privateImageimg;//画面的背景
/**
*构造函数
*/
publicClockCanvas(){
//设置timer
timer=newTimer();
timerTask=newClockTimerTask(this);
timer.schedule(timerTask,1000,1000);
//登陆背景画面
try{
img=Image.createImage(IMAGE_PATH);
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*画时钟
*/
protectedvoidpaint(Graphicsg){
//背景的设置
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());
g.drawImage(img,5,0,Graphics.TOP|Graphics.LEFT);
//获得时间
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);
//显示时间
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);
//时钟时针的显示
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;
//描绘时针
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
扩展函数
在本讲中制作的模拟表应用程序是实现了表的最小功能的示范应用程序。在本应用程序中,也可以自己增加闹钟和跑秒等扩展功能,这些自己都尝试一番哦。
4-4总结
在本讲中我们讲述了制作动画应用程序的具体方法。使用动画,就要对画像赋予动感,这比游戏还要复杂,所以应该能够制作图表应用程序。要运行动画,线据和秒表是不可缺少的基本技术,但是线据知识是一门深奥的技术。参照本讲中的样品,加深线据方面的知识,就能够制作成不错的应用程序。在下一讲中,我们将就效果音和BGM、声音等技术进行详细讲解。敬请关注!
4-3-4完成
以下是所制作的程序的源码。
Clock.java
ClockCanvas.java
ClockTimerTask.java
TrigonometricFunctions.java
运行结果如下所示:(6).
![](../img/eep/emb/emb-24808z3lpoviviub.jpg)
Figure6
4-3-4
扩展函数
在本讲中制作的模拟表应用程序是实现了表的最小功能的示范应用程序。在本应用程序中,也可以自己增加闹钟和跑秒等扩展功能,这
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- Linux内核解读入门(11-09)
- Linux操作系统网络驱动程序编写(04-11)
- Linux系统对ISA总线DMA的实现(06-19)
- 基于MPEG-4的嵌入式多媒体监控系统中压缩/解压卡的设计与实现(10-15)
- Windows CE下驱动程序开发基础(04-10)