2014年5月26日 星期一

第十四週上課內容

1. 期末作品剩下時間:
Week14 本週
Week15
Week16 端午節放假
Week17
Week19 (期中考後繳交期末作品)

2. 老師示範上週還沒示範的 熊貓小遊戲

3. 老師到每一組, 與同學們討論 "期末作品的主題/目前進度" 及 "今天要做出來的雛型" 等

4. 同學們遇到問題時及老師嘗試回覆

Q1: 要如何將橫向捲軸遊戲中, 移動背景?
A1: 可以多一個背景移動位移值 int shiftX=0, 在移動更新時, 改變 shiftX, 在畫背景的圖時將其座標減掉shiftX值即可。

Q2: 老師請問怎麼將勾拳的 Z的位移量加大?
A2: 就將 Z的值乘上一個較大的量值即可。

Q3: 請問如何重覆秀出很多循環的畫面?
A3: 可以在改座標時用變數來切換做到。

Q4: 請問如何將 Kinect 得到的兩個人, 分別畫在畫面的左右兩端?
A4: 可以使用2個 RGBA 的圖 (imgUser1, imgUser2), 遇到左邊藍色的pixels放在imgUser1, 遇到右邊綠色的 pixels放在imgUser2。其他的值都設成 RGBA為 (0,0,0,0), 這樣就可以成功了。

Q5: 請問要怎麼按方向鍵向上時, 主角往很順地往上走?
A5: 可以在 keyPressed()裡面遇到 keyCode==UP時, 改變 bGoUp=true, 接著在繪圖更新函式中, if(bGoUp){ 去將座標做修改即可 }

Q6: 請問要怎麼做, 按下 UP 鍵時, 背景就慢慢地往下捲?
A6: 可以在 keyPressed()裡面遇到 keyCode==UP時, 設定 GoUpTime=100, 接著在繪圖更新函式中, if(GoUpTime>0) {修改要捲的座標; GoUpTime--;} 這樣就會在捲到 100次後, 自己停下來

Q7: 請問 Processing 裡面 draw()每秒呼叫幾次?
A7: 請去查 frameRate 即可查到預設每秒60次, 另外可用 frameRate(30)改成每秒30次, 或改成其他值。

Q8: 請問要怎麼亂數決定要出不同的拳 (正拳、左鈎拳、右鈎拳)?
A8: 就用 boxingType=int(random(3)); 來決定出的是什麼拳

Q9: 請問出拳之後要怎麼休息 2秒鐘再出下一拳?
A9: 可以設定一個 coolDown變數, 一旦出拳結束後, coolDown=120, 接著在繪圖更新函式中 if(coolDown>0) {coolDown--; return;} 即可達到 cool down的效果。不過要小心, return 之後的程式就都不會更新了哦! 要注意放的位置, 決定有哪些固定要執行/哪些在cool down時不執行。

void setup(){
  size(600,400);
}
int boxingType=0;//0: center, 1: left hook, 2: right hook
float boxingPath=0;//0 to 3.1415926
void draw(){
  background(128);
  if(boxingType==0){
    float x= 300, y=boxingPath*400/PI;
    ellipse(x, y, 30,30);
    boxingPath+=0.1;
    if(boxingPath>=PI) reset();
  }else if(boxingType==1){
    float x=cos(boxingPath)*100+400, y=sin(boxingPath)*100+100;
    ellipse(x, y, 30,30);
    boxingPath+=0.1;
    if(boxingPath>=PI) reset();
  }else if(boxingType==2){
    float x=-cos(boxingPath)*100+400, y=sin(boxingPath)*100+100;
    ellipse(x, y, 30,30);
    boxingPath+=0.1;
    if(boxingPath>=PI) reset();
  }
}
void reset(){
  boxingPath=0;
  boxingType=int(random(3));
}

沒有留言:

張貼留言