動畫程式 撰寫流程與範例

16
動動動動 動動動動動動動

description

動畫程式 撰寫流程與範例. 動畫程式待處理問題 (1). 定義分析問題 以文字模式產生8*8之行人原地蹋步動畫 功能分項列表 動畫分解動作分析, 1~ N 張分解動作 8*8 點圖型之產生與顯示 動畫分解動作之控制 動畫(4) 顯示位置 與軌跡( 原地踏步故無移動軌跡 ). 問題分類. 概念與資料部份 處理功能 流程規劃. 動畫程式待處理問題 (2). 動畫分解動作分析, 1~ N 張分解動作 8*8 點圖型之產生與顯示 圖案資料 ,(1) 顯示輸出 動畫分解動作之控制 圖片(2) 轉換與顯示 (1~ N 依序), (3) 動作速度控制 - PowerPoint PPT Presentation

Transcript of 動畫程式 撰寫流程與範例

Page 1: 動畫程式 撰寫流程與範例

動畫程式撰寫流程與範例

Page 2: 動畫程式 撰寫流程與範例

動畫程式待處理問題 (1)

定義分析問題以文字模式產生 8*8 之行人原地蹋步動畫

功能分項列表動畫分解動作分析 , 1~N 張分解動作8*8 點圖型之產生與顯示動畫分解動作之控制動畫 (4) 顯示位置顯示位置與軌跡 ( 原地踏步故無移動軌跡 )

Page 3: 動畫程式 撰寫流程與範例

動畫程式待處理問題 (2)

動畫分解動作分析 , 1~N 張分解動作8*8 點圖型之產生與顯示

圖案資料 ,(1) 顯示輸出顯示輸出動畫分解動作之控制

圖片 (2) 轉換與顯示轉換與顯示 (1~N 依序 ), (3) 動作速度動作速度控制控制動畫模式 : 循環 1~N~1~N…, 一次一次 1~1~NN

動畫 (4) 顯示位置顯示位置與軌跡 ( 原地踏步故無移動軌跡 )

概念與資料部份

處理功能處理功能

流程規劃

問題分類

Page 4: 動畫程式 撰寫流程與範例

範例 :動畫模式 一次 1~N程式流程規劃

開始

(4)設定顯示位置圖形資料設定

設定顯示圖片 I=1

(3)顯示速度控制

end

(1)(1) 顯示顯示圖片 I (2)切換下一張圖片I=I+1

是最後一張 ?

Page 5: 動畫程式 撰寫流程與範例

分析功能 (1)顯示圖片文字模式產生 8*8 圖形 , 於特定位置顯示

如何顯示符號如何顯示符號 ?以字串顯示一次 8 字元如何定位如何定位 ?

定義顯示位址座標 X,Y, 使用 GOTOXY圖形資料如何設定呢圖形資料如何設定呢 ?

以 8 行 8 字元字串設定根據上述設定撰寫 displaydisplay 副程式副程式

Page 6: 動畫程式 撰寫流程與範例

分析功能 (2)圖片轉換8*8 圖形轉換

如何清除舊圖案如何清除舊圖案 ?在原位置顯示 8*8 空白鍵 (space) 資料如何讀取新圖案資料如何讀取新圖案資料 ?

透過連續定義之資料區每一圖片為 8*(8+1( 字串結束 0))=72 之長度 , 每改一次分解動作圖片位置加 72顯示位置顯示位置 (( 是否改變是否改變 ))?

根據座標 X,Y 顯示

Page 7: 動畫程式 撰寫流程與範例

分析功能 (3)動作速度控制分解動作之速度控制

動作速率動作速率 ==圖片切換速率圖片切換速率每次切換圖片 , 會有圖片移動之感覺

( 圖形有變動 )於顯示後 延遲 數 ms, 再顯示下一圖形如何計時如何計時 ??

使用 delay, 延遲 數 ms

Page 8: 動畫程式 撰寫流程與範例

分析功能 (4)顯示位置與軌跡動畫之顯示位置與軌跡

顯示位置之設定顯示位置之設定改變位址座標 X,Y軌跡軌跡隨時間改變之軌跡

根據移動之軌跡公式計算 X,Y 座標 , ( 本範例以直線計算 )

Page 9: 動畫程式 撰寫流程與範例

程式功能加強與改進完整程式 完整程式 movie.asmmovie.asm

上述程式有那些上述程式有那些待改進待改進 ?

可再可再加強擴充加強擴充何功能何功能 ?

Page 10: 動畫程式 撰寫流程與範例

如何顯示符號.datapattern byte " **** ",0 byte " ** ",0 byte " ** ",0 byte " * ** ",0 byte " ** ** ",0 byte " *** ",0 byte " ** * ",0 byte "* * ",0.code

mov edx, offset patterncall writestring

Page 11: 動畫程式 撰寫流程與範例

display PROC pushad; mov ECX, 8d2: mov dh,y ;x mov dl,x ;y add dh,8 sub dh,cl call gotoxy

display PROC pushad; mov ECX, 8d2: mov dh,y ;x mov dl,x ;y add dh,8 sub dh,cl call gotoxy

Display 副程式; eax 為顯示圖形之偏; 移位址

mov edx, eax call WriteString

add eax,9 loop d2

popad retdisplay ENDP

; eax 為顯示圖形之偏; 移位址

mov edx, eax call WriteString

add eax,9 loop d2

popad retdisplay ENDP

Page 12: 動畫程式 撰寫流程與範例

如何清除舊圖案clear_p PROC pushad; mov ECX, 8d1: mov dh,y ;x mov dl,x ;y add dh,8 sub dh,cl call gotoxy

clear_p PROC pushad; mov ECX, 8d1: mov dh,y ;x mov dl,x ;y add dh,8 sub dh,cl call gotoxy

; cp 為“ ” ,0mov edx, offset cp call WriteString

add eax,9 loop d2 popad retclear_p ENDP

; cp 為“ ” ,0mov edx, offset cp call WriteString

add eax,9 loop d2 popad retclear_p ENDP

Page 13: 動畫程式 撰寫流程與範例

如何讀取新圖案資料 add ebx, 8*9 ; 下一張圖位置在

ebx+72

mov eax, ebx

call display

Page 14: 動畫程式 撰寫流程與範例

動作速率 = 圖片切換速率 mov eax, D_time

; control display rate (3)

call delay

Page 15: 動畫程式 撰寫流程與範例

顯示位置與軌跡 mov al, x

inc al ; 每次向左移一格 mov x,al

cmp al,65 ; 銀幕最左邊 jne _s2

mov al,10 ; 銀幕最右邊 mov x,al

_s2:

Page 16: 動畫程式 撰寫流程與範例

動畫程式

TITLE (.asm); This program; Last update:; Include Irvine32.inc.datacp byte 8 DUP(' '),0pattern byte " **** ",0 byte " ** ",0 byte " ** ",0 byte " * ** ",0 byte " ** ** ",0 byte " *** ",0 byte " ** * ",0 byte "* * ",0p1 byte " **** ",0 byte " ** ",0 byte " ** ",0 byte " *** ",0 byte " ** * ",0 byte " *** ",0 byte " * * ",0 byte " * * ",0 p2 byte " **** ",0 byte " ** ",0 byte " ** ",0 byte " *** ",0 byte " ** ",0 byte " ** ",0 byte " ** ",0 byte " *** ",0p3 byte " **** ",0 byte " ** ",0 byte " ** ",0 byte " *** ",0 byte " *** ",0 byte " ** ",0 byte " * ",0 byte " * * ",0p4 byte " **** ",0 byte " ** ",0 byte " ** ",0 byte " *** ",0 byte " ** * ",0 byte " *** ",0 byte " * * ",0 byte " ** * ",0pattern_no dword 5;x byte 10y byte 10D_time dword 500

clear_p PROC pushad mov ECX, 8d1: 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 retclear_p ENDPdisplay PROC pushad mov ECX, 8d2: mov dh,y ;x mov dl,x ;y add dh,8 sub dh,cl call gotoxy mov edx, eax call WriteString add eax,9 loop d2 popad retdisplay ENDP;END main

.codemain 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 exitmain ENDP