2021年11月29日 星期一

常闇的程式之路week10

 這禮拜的主要範例是利用方向鍵來讓畫面中有動作變化的小人像這不同方向移動,這是老師的範例程式:

PImage img;

void setup(){

size(500,500);

img=loadImage("img.jpg");

imageMode(CENTER);

}

int a=0, b=0, x=250, y=250;

void draw(){

background(255);

//image( img, 0,0);

image(  img.get(141*a, 211*b, 141,211), x,y);

if(frameCount%30==0) a = (a+1)%4;

}

void keyPressed(){

if(keyCode==RIGHT){ b=3; x++; }

if(keyCode==LEFT) { b=2; x--; }

if(keyCode==UP) { b=1; y--; }

if(keyCode==DOWN){ b=0; y++; }

}

首先先用PImage定義一個資料型態為圖片的變數img,然後把img指定為一個匯入的圖片img.jpg,並將指定方式設定成置中,這樣img這個變數就會是img.jpg這張圖了。

!!注意,這裡的img.jpg是一個上面有連續動作變換的連環圖,這裡不知道的話後面也不必說了。!!

好的,接著就是印出img的部分了。繪製背景別忘記,image(  img.get(141*a, 211*b, 141,211), x,y);這件事是什麼呢,它的意思就是依照a與b的值,對於image印出的img這張圖的位置與大小,img.get(x ,y ,x_size ,y_size)這個函數能夠令img這個變數只印出x座標與y座標上,範圍為141,211的那一部分。後者的image(x ,y)的部分則是為了後面判斷圖片位置移動而作的變數,接下來將會以鍵盤操控的方法控制這兩變數,進而實現移動圖片的動作。

這裡使用if(frameCount%30==0) a = (a+1)%4;這判斷式可讓a隨著時間遞增,這樣一來便能讓img.get隨著時間換位置。還記得這張img.jpg是個連環圖吧?一次顯示一部分,看起來人物就動起來了。

接著是方向鍵控制的部分,每個鍵的觸發都要額外寫一個void已進行函式判斷。接下來就是簡單的加減法了。

這裡有一個要注意的地方:在按下上下左右的時候,b會變化,那是因為b在img.set()中所代表的位置便是人物面對上下左右時的圖樣。如此控制便能讓人物看起來永遠都是面向他索前進的方向。這就是對於這次的範例,我所得到的理解。


至於我的期末作業要做什麼......我暫時還拿不定主意,下禮拜再確定吧。

沒有留言:

張貼留言