==================================使用说明=============================================== Readme: 1. From VIDE->TOOLS->Sdownload, select com1, press connect. Select *.dmp. Key in downlaod address of 0x2200000, then downlaod. After that quit it. 2. In VIDE, press debugger. choose 38400, com1, load. Then run. Remark: *.dmp includes PIC and BMP *.txt includes address of each file in *.dmp. ================================================= =================================================== 设计一个8.3MS的定时器中断,查询UART1的鼠标。1200BPS 并做一个时钟8.3MS*120=1S, 8.3* 12 = 0.1S 全局时钟变量LONG TIMER_VAR 单位0.1S,最大计数13年。 动画变动慢时采用0.2S间隔 //开始时间间隔0.2S while() { //普通图象处理 .... //时间处理,可以做为一个函数使用 time_interval = TIMER_VAR - last_time; while( time_interval >= 2) { time_interval = TIMER_VAR - last_time; }//在这里等待至少0.2S last_time =TIMER_VAR; //鼠标处理,如果鼠标改变或键按下 //如键按下没有释放,则记录按下的时间,间隔0.5S,如仍然键按下没有释放,键处理,压注变化。 //如键按下又释放,时间间隔恢复为0.2S } ==================================== 改进了恢复算法,设置了bank_switch标志。要恢复上上次的背景而不是上次的。 2002-1-29:设计一个通用的窗口系统。 为每一个图形定义一个结构,包含FLASH/RAM的地址,T-MEM的地址,行列大小,屏幕上的X、Y地址, 上2次的屏幕X、Y的地址,相对上次是否移动,显示模式,透明色。 typedef struct Pic_struct_define { U32 PIC_RAM_address; U32 PIC_TMEM_address; U16 PIC_columns; U16 PIC_lines; U16 PIC_x; U16 PIC_y; U16 PIC_last1_x; U16 PIC_last1_y; U16 PIC_last2_x; U16 PIC_last2_y; U8 PIC_move; U16 PIC_disp_mode; U32 PIC_transparency_color; } _vgPic_struct; /////////////////////////////////////// 1-30:采用贴3,4次才能恢复背景 1-30:新的流程,在循环中处理各种事件。 while(1) { if 投币--〉投币处理 if 鼠标移动--〉移动处理 鼠标按下且点中--〉区域变暗,出现大框数字,每0.5秒+1 鼠标释放--〉区域恢复,大框数字消失,变成小数字贴在区域上。 if 0.5秒,大框数字,每0.5秒+1 if 过1秒时间,时钟减1。 if 时钟减为0时,用算法判断输赢. 将所有图形贴出来。 只要有图形改变,结构P_disp变1则贴图,执行FLIP. } 新的结构,结构数组 typedef struct My_Pic_def{ // char P_name[8]; char P_disp; //1: diaplay, 0:not U16 *P_RAM_add; U32 P_TMEM_add; U16 P_cols; U16 P_lines; U16 P_x; //current position U16 P_y; U16 P_last0_x; //last U16 P_last0_y; U16 P_last1_x; //the one before last U16 P_last1_y; U16 P_r_x; //used for recover back ground U16 P_r_y; // U8 P_move; //2,1,0 for dubble buffer U16 P_size; }My_Pic; My_Pic _pic_[40]; strcpy(_pic_[0].P_name, "dig0001"); /*给数组赋字符串 7bytes*/ _pic_[]代表其他小图形,代表位置从0-50的图形,不同位置可以用一个图形,但是同一个位置是可以变换图形的。 //位置有变化的只有几个 Exchange_oldXY(bank_switch, &mouse); Exchange_oldXY(bank_switch, &girl); Recover_gnd(&mouse,&Gnd); Recover_gnd(&girl, &Gnd); //其他的直接贴上 //最后贴上位置有变化的只有几个 Draw_my_pic(COMM_MODE, &girl, 0); Draw_my_pic(TRANS_MODE, &mouse, 0xffffff); //把各种按键都编号,定义结构 KEY[0] - KEY[50],KEY的范围。 typedef struct My_Key_def{ // char K_name[8]; U16 K_x0; // U16 K_y0; U16 K_x1; // U16 K_y1; char K_press; //1-press,0-release, unsigned char K_bet; }My_Key; My_Key Key[50]; 要判断鼠标落在哪个键内。是按下还是单击。鼠标抬起后所有K_press变为0。 int Which_key_is_pressed(void); 设计一个对_pic_[]进行更换图形的函数。将不同图形的TMEM地址统一排列。用结构数组。再用INIT_STRUCT 初始化到_pic_[]种。 大循环中,应加入投币和退币及开始的事件处理。 =============2003-2-8 将 bank_switch = (~bank_switch)& 0x01; Exchange_oldXY(bank_switch, &mouse); Exchange_oldXY(bank_switch, &girl); //recover background //about mouse Recover_gnd(&mouse,&Gnd); //about girl Recover_gnd(&girl, &Gnd); 放到最后的有HAS CHANGE的处理中,这样,鼠标、时钟都会引起变化 =========== 58*42的图不能贴,换成64*42 OK,40*38 OK。用vg2_pic_test目录的程序可以测试贴图。4的倍数? ========== 增加新图,要修改:void init_all_pic_address(void), void init_small_pic(void) void init_key_range(void) void Copy_all_pic_to_Tmem(void) 最好做一个VC程序可以算出TMEM的分配的地址。 =========== 给ALL_PIC_address每一个结构分派一个ID号和KEY ID。方便搜索。++,--表示数字的加减, =========== 2003-2-9移植到AMA上 增加recover_all_key();在没有选中时恢复所有KEY的图形。 作了21个KEY,用同样的图形。 在800*511时注意改动背景图尺寸,TMEM所占尺寸,X_O. (RECOVER的偏移,鼠标坐标不改) 加上声音放在TMEM 0X3E00000 可以了,不知为什么需要用AMTV_n2的声音程序和HEADER ============ 考虑投币、开始按钮。设置GAME START变量 ============ 2003-2-10 声音vgBOOL vgSndSetWav(char *filename, U32 filelength, U32 frequency, S8 volume, U8 mode, _DGSNDWAV *pwav ) 加了声音数据长度U32 filelength的传入。否则有时拷贝出错? ============ 加了软件出错陷阱error_strap(num); ============ 层发现vgFree( pdata )死机,去掉即可。 =========== 2003-2-13 采用amakit2-10-0 640 加入埃及王子动画电视MTV。