動畫程式 撰寫流程與範例
動畫程式待處理問題(1) 定義分析問題 以文字模式產生8*8之行人原地蹋步動畫 功能分項列表 動畫分解動作分析, 1~N張分解動作 8*8點圖型之產生與顯示 動畫分解動作之控制 動畫(4)顯示位置與軌跡(原地踏步故無移動軌跡)
動畫程式待處理問題(2) 動畫分解動作分析, 1~N張分解動作 8*8點圖型之產生與顯示 動畫分解動作之控制 圖案資料,(1)顯示輸出 動畫分解動作之控制 圖片(2)轉換與顯示(1~N依序), (3)動作速度控制 動畫模式: 循環1~N~1~N…, 一次1~N 動畫(4)顯示位置與軌跡(原地踏步故無移動軌跡) 概念與資料部份 處理功能 流程規劃 問題分類
範例:動畫模式 一次1~N程式流程規劃 開始 (4)設定顯示位置 圖形資料設定 設定顯示圖片I=1 (2)切換下一張圖片 (1)顯示圖片I 是最後一張? (3)顯示速度控制 end
分析功能(1)顯示圖片 文字模式產生8*8圖形, 於特定位置顯示 如何顯示符號? 以字串顯示一次8字元 如何定位? 定義顯示位址座標X,Y, 使用GOTOXY 圖形資料如何設定呢? 以8行8字元字串設定 根據上述設定撰寫display副程式
分析功能(2)圖片轉換 8*8圖形轉換 如何清除舊圖案? 在原位置顯示8*8空白鍵(space)資料 如何讀取新圖案資料? 透過連續定義之資料區每一圖片為8*(8+1(字串結束0))=72 之長度, 每改一次分解動作圖片位置加72 顯示位置(是否改變)? 根據座標X,Y顯示
分析功能(3)動作速度控制 分解動作之速度控制 動作速率=圖片切換速率 每次切換圖片, 會有圖片移動之感覺(圖形有變動) 於顯示後 延遲 數 ms, 再顯示下一圖形 如何計時? 使用delay,延遲 數 ms
分析功能(4)顯示位置與軌跡 動畫之顯示位置與軌跡 顯示位置之設定 改變位址座標X,Y 軌跡隨時間改變之軌跡
程式功能加強與改進 完整程式 movie.asm 上述程式有那些待改進? 可再加強擴充何功能?
如何顯示符號 .data pattern byte " **** ",0 byte " ** ",0 byte " ** ",0 .code mov edx, offset pattern call writestring
Display 副程式 ; eax 為顯示圖形之偏 display PROC ; 移位址 pushad mov edx, eax ; call WriteString add eax,9 loop d2 popad ret display ENDP display PROC pushad ; mov ECX, 8 d2: mov dh,y ;x mov dl,x ;y add dh,8 sub dh,cl call gotoxy
如何清除舊圖案 ; cp 為“ ”,0 clear_p PROC mov edx, offset cp pushad mov ECX, 8 d1: mov dh,y ;x mov dl,x ;y add dh,8 sub dh,cl call gotoxy ; cp 為“ ”,0 mov edx, offset cp call WriteString add eax,9 loop d2 popad ret clear_p ENDP
如何讀取新圖案資料 add ebx, 8*9 ;下一張圖位置在ebx+72 mov eax, ebx call display
動作速率=圖片切換速率 mov eax, D_time ; control display rate (3) call delay
顯示位置與軌跡 mov al, x inc al ; 每次向左移一格 mov x,al cmp al,65 ; 銀幕最左邊 jne _s2
動畫程式 TITLE (.asm) ; This program ; Last update: ; Include Irvine32.inc .data cp byte 8 DUP(' '),0 pattern byte " **** ",0 byte " ** ",0 byte " ** ",0 byte " * ** ",0 byte " ** ** ",0 byte " *** ",0 byte " ** * ",0 byte "* * ",0 p1 byte " **** ",0 byte " ** * ",0 byte " * * ",0 byte " * * ",0 p2 byte " **** ",0 p3 byte " **** ",0 byte " * ",0 byte " * * ",0 p4 byte " **** ",0 pattern_no dword 5 x byte 10 y byte 10 D_time dword 500 .code main PROC call clrscr _start: ; setup the patten parameter mov ecx, pattern_no mov ebx, OFFSET pattern _s1: ; draw the pattern (1) mov eax, ebx call display mov eax, D_time ; control display rate (3) call delay ; clear previous pattern (1) call clear_p ; change to next pattern (2) add ebx,8*9 ; calculate positioin (4) mov al, x inc al mov x,al cmp al,65 jne _s2 mov al,10 mov x,al _s2: loop _s1 jmp _start exit main ENDP clear_p PROC pushad mov ECX, 8 d1: mov dh,y ;x mov dl,x ;y add dh,8 sub dh,cl call gotoxy mov edx,OFFSET cp call WriteString loop d1 popad ret clear_p ENDP display PROC d2: mov edx, eax add eax,9 loop d2 display ENDP ; END main 動畫程式