2017年10月2日 星期一

week04 郭晉瑜上課筆記

做出憤怒鳥多隻怪物

PImage img0,img1;
void setup(){
  size(800,600);
  img0 = loadImage("Mario.png");
  img1 = loadImage("Mario1.png");
  imageMode(CENTER);
  for(int i=0;i<5;i++)  //改成for迴圈一次製作多隻
  {
    for(int j=0;j<4;j++)
    {
      mar1x[i][j]=700-i*100;
      mar1y[i][j]=100+j*100;
      img1Alive[i][j]=true;
    }
  }
}
float marx=400, mary=300;
float marvx=0, marvy=0;
float marax=0, maray=0;
float [][]mar1x = new float[5][4]; //把要用成多隻的怪物位置用陣列表示
float [][]mar1y = new float[5][4];
boolean [][]img1Alive = new boolean[5][4];
void draw(){
  background(255);
  image(img0,marx,mary,100,100);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      if (dist(mar1x[i][j],mar1y[i][j],marx,mary)<100)
      {
        img1Alive[i][j]=false;
      }
      if (img1Alive[i][j]) image(img1,mar1x[i][j],mar1y[i][j],100,100);
   
    }
  }
  marx +=marvx;
  mary +=marvy;
  if(marx<50){marx=50;marvx=-marvx;}
  if(marx>width-50){marx=width-50;marvx=-marvx;}
  if(mary<50){mary=50;marvy=-marvy;}
  if(mary>height-50){mary=height-50;marvy=-marvy;}
  marvx += marax;
  marvy += maray;
  marvx *=0.995;
  marvy *=0.995;
}
void mouseDragged()
{
  marx=mouseX; mary=mouseY;
  marvx=marvy=marax=maray=0;
}
void mouseReleased()
{
  marvx = (400-mouseX)/10.0;
  marvy = (400-mouseY)/10.0;
  maray= 0.98;
}


簡化版 做出20個形狀

float [][]pigx = new float[5][4];
float [][]pigy = new float[5][4];
boolean [][]pigAlive= new boolean[5][4];
void setup()
{
  size(800,600);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      pigx[i][j]=700-i*100;
      pigy[i][j]=100+j*100;
      pigAlive[i][j]=true;
    }
  }
}
void draw()
{
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      fill(#07DE0F);  ellipse(pigx[i][j],pigy[i][j],100,100);
    }
  }
  fill(#DE0719);  ellipse(400,300,100,100);
}


先寫好牛頓第一、第二運動定律 讓pig碰到bird時 bird消失

float birdX = 100, birdY = 400;
float [][]pigx = new float[5][4];
float [][]pigy = new float[5][4];
boolean [][]pigAlive= new boolean[5][4];
float birdVX=0, birdVY=0;
float birdAX=0, birdAY=0;
void setup()
{
  size(800,600);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      pigx[i][j]=700-i*100;
      pigy[i][j]=100+j*100;
      pigAlive[i][j]=true;
    }
  }
}
void draw()
{
  background(255);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      if(dist(birdX,birdY,pigx[i][j],pigy[i][j])<100)
        pigAlive[i][j]=false;
      if(pigAlive[i][j])
      {
        fill(#07DE0F);  ellipse(pigx[i][j],pigy[i][j],100,100);
      }
    }
  }
  fill(#DE0719);  ellipse(birdX,birdY,100,100);
  birdX += birdVX; birdY +=birdVY;
  birdVX += birdAX; birdVY += birdAY;
}
void mouseDragged()
{
  birdX=mouseX;
  birdY=mouseY;
}


增加拋物線 加速度與移動速度 重量
float birdX = 100, birdY = 400;
float [][]pigx = new float[5][4];
float [][]pigy = new float[5][4];
boolean [][]pigAlive= new boolean[5][4];
float birdVX=0, birdVY=0;
float birdAX=0, birdAY=0;
void setup()
{
  size(800,600);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      pigx[i][j]=700-i*100;
      pigy[i][j]=100+j*100;
      pigAlive[i][j]=true;
    }
  }
}
void draw()
{
  background(255);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      if(dist(birdX,birdY,pigx[i][j],pigy[i][j])<100)
        pigAlive[i][j]=false;
      if(pigAlive[i][j])
      {
        fill(#07DE0F);  ellipse(pigx[i][j],pigy[i][j],100,100);
      }
    }
  }
  fill(#DE0719);  ellipse(birdX,birdY,100,100);
  birdX += birdVX; birdY +=birdVY;
  birdVX += birdAX; birdVY += birdAY;
}
void mouseDragged()
{
  birdX=mouseX;
  birdY=mouseY;
  birdVX=0; birdVY=0; //讓拖曳時沒有速度
  birdAX=0; birdAY=0; ////讓拖曳時沒有加速度(不會在拖的時候下墜)
}
void mouseReleased()
{
  birdVX=(100-mouseX)/5.0;
  birdVY=(400-mouseY)/5.0;
  birdAY=0.98;
}



加入音樂


sketch - import library -add library - 下載sound
sketch - import library - sound

import processing.sound.*;

SoundFile sound;
void setup()
{
  size(800,600);
  sound = new SoundFile(this, "blue.mp3");
  sound.play();
  sound.loop();
}

因不明原因sound不能使用
改用minim

import ddf.minim.*;
import ddf.minim.effects.*;

Minim minim;
AudioPlayer groove;
void setup()
{
  size(200,100,P3D);
  minim = new Minim(this);
  groove = minim.loadFile("blue.mp3",2048);
}

沒有留言:

張貼留言