week08
碰撞偵測
void setup(){
size(400,400);
}
float x=200, y=200, vx=1, vy=1;
void draw(){
ellipse(x,y, 10,10);
x += vx;
y += vy;
}
加入重力加速度
void setup(){
size(400,400);
}
float x=50, y=250, vx=2, vy=-20;
void draw(){
ellipse(x,y, 10,10);
x += vx;
y += vy;
vy += 0.98; //重力加速度
}
碰到地板
void setup(){
size(400,400);
}
float x=50, y=250, vx=2, vy=-20;
void draw(){
x += vx;
y += vy;
vy += 0.98; //重力加速度
if(y>350){ //利用if判斷,看有沒有到地板 y=350位置
y=350;
}
ellipse(x, y, 10, 10);
}
物體會反彈
void setup(){
size(400,400);
}
float x=50, y=250, vx=2, vy=-20;
void draw(){
x += vx;
y += vy;
vy += 0.98; //重力加速度
if(y>350){ //利用if判斷,看有沒有到地板 y=350位置
y=350;
vy = -vy * 0.5; //能量耗損、速度變慢
}
ellipse(x, y, 10, 10);
}
void setup(){
size(400,400);
}
float x=50, y=250, vx=2, vy=-20;
void draw(){
x += vx;
y += vy;
vy += 0.98; //重力加速度
if(y>350){ //利用if判斷,看有沒有到地板 y=350位置
y=350;
vy = -vy * 0.5; //能量耗損、速度變慢
vx = vx * 0.8;
}
ellipse(x, y, 10, 10);
}
馬力歐能左右移動,並加上背景
void setup(){
size(400,400);
}
float marioX=50, marioY=250, vx=0, vy=0;
void draw(){
background(102,137,255);
marioX += vx;
fill(255,0,0); ellipse(marioX, marioY, 15,25);
fill(229,119,42); rect(0, 260, 400, 150);
}
void keyPressed(){
if(keyCode==RIGHT) vx = 2;
if(keyCode==LEFT) vx = -2;
}
馬力歐能往左往又跑,手放開時會停下,但按上時會跑掉
void setup(){
size(400,400);
}
float marioX=50, marioY=250, vx=0, vy=0;
void draw(){
background(102,137,255);
marioX += vx;
marioY += vy;
fill(255,0,0); ellipse(marioX, marioY, 15,25);
fill(229,119,42); rect(0, 260, 400, 150);
}
void keyPressed(){
if(keyCode==RIGHT) vx = 2;
if(keyCode==LEFT) vx = -2;
if(keyCode==UP) vy = -20;
}
void keyReleased(){
if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
}
void setup(){
size(400,400);
}
float marioX=50, marioY=250, vx=0, vy=0;
void draw(){
background(102,137,255);
marioX += vx;
if(flying){ //如果在飛行
marioY += vy; //上下位置會改變
vy += 0.98; //重力加速度往下
if(marioY >=250){ //碰到地板
marioY = 250; //站在地板上
flying = false; //不再飛行
}
}
fill(255,0,0); ellipse(marioX, marioY, 15,25);
fill(229,119,42); rect(0, 260, 400, 150);
}
boolean flying = false; //一開始,沒有在飛
void keyPressed(){
if(keyCode==RIGHT) vx = 2;
if(keyCode==LEFT) vx = -2;
if(keyCode==UP && flying==false){ //如果沒有在飛的話,才能飛
vy = -20;
flying = true; // 開始飛行
}
}
void keyReleased(){
if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
}
馬力歐能撞到方塊
void setup(){
size(400,400);
}
float marioX=50, marioY=250, vx=0, vy=0;
void draw(){
background(102,137,255);
marioX += vx;
if(flying){ //如果在飛行
marioY += vy; //上下位置會改變
vy += 0.98; //重力加速度往下
if(marioY >=250){ //碰到地板
marioY = 250; //站在地板上
flying = false; //不再飛行
}
}
fill(255,0,0); ellipse(marioX, marioY, 15,25);
fill(229,119,42); rect(0, 260, 400, 150);
fill(229,119,42); rect(200, 150, 20, 20);
if(hitBox(200,150,20,20)){
vy = 0;
marioY = 150+20;
}
}
boolean hitBox(int x, int y, int w, int h){
if(x<marioX && marioX<x+w && y<marioY && marioY<y+h) return true;
else return false;
}
boolean flying = false; //一開始,沒有在飛
void keyPressed(){
if(keyCode==RIGHT) vx = 2;
if(keyCode==LEFT) vx = -2;
if(keyCode==UP && flying==false){ //如果沒有在飛的話,才能飛
vy = -20;
flying = true; // 開始飛行
}
}
void keyReleased(){
if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
}
馬力歐能跳到方塊上面,並能扎實地碰到方塊,但跳不下來
void setup(){
size(400,400);
}
float marioX=50, marioY=250, vx=0, vy=0;
void draw(){
background(102,137,255);
marioX += vx;
if(flying){ //如果在飛行
marioY += vy; //上下位置會改變
vy += 0.98; //重力加速度往下
if(marioY >=250){ //碰到地板
marioY = 250; //站在地板上
flying = false; //不再飛行
}
}
fill(255,0,0); ellipse(marioX, marioY, 15,25);
fill(229,119,42); rect(0, 260, 400, 150);
fill(229,119,42); rect(200, 150, 20, 20);
if(hitBox(200,150,20,20)){
if(vy>0){
marioY = 150-10;
flying = false;
}else{
vy = 0;
marioY = 150+20+10;
}
}
}
boolean hitBox(int x, int y, int w, int h){
if(x-7<marioX && marioX<x+w+7 && y-10<marioY && marioY<y+h+10) return true;
else return false;
}
boolean flying = false; //一開始,沒有在飛
void keyPressed(){
if(keyCode==RIGHT) vx = 2;
if(keyCode==LEFT) vx = -2;
if(keyCode==UP && flying==false){ //如果沒有在飛的話,才能飛
vy = -20;
flying = true; // 開始飛行
}
}
void keyReleased(){
if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
}
馬力歐能跳到方塊上,並能跳下來
void setup(){
size(400,400);
}
float marioX=50, marioY=250, vx=0, vy=0;
void draw(){
background(102,137,255);
marioX += vx;
if(flying){ //如果在飛行
marioY += vy; //上下位置會改變
vy += 0.98; //重力加速度往下
if(marioY >=250){ //碰到地板
marioY = 250; //站在地板上
flying = false; //不再飛行
}
}
fill(255,0,0); ellipse(marioX, marioY, 15,25);
fill(229,119,42); rect(0, 260, 400, 150);
fill(229,119,42); rect(200, 150, 20, 20);
if(hitBox(200,150,20,20)){
if(vy>0){
marioY = 150-10;
flying = false;
stand_box = true;
}else{
vy = 0;
marioY = 150+20+10;
}
}
if(stand_box==true && flying==false && leaveBox(200,150,20,20)){
stand_box = false;
flying = true;
vy = 0;
}
}
boolean leaveBox(int x, int y, int w, int h){
if(x-7>marioX || marioX>x+w+7) return true;
else return false;
}
boolean hitBox(int x, int y, int w, int h){
if(x-7<marioX && marioX<x+w+7 && y-10<marioY && marioY<y+h+10) return true;
else return false;
}
boolean flying = false, stand_box=false; //一開始,沒有在飛
void keyPressed(){
if(keyCode==RIGHT) vx = 2;
if(keyCode==LEFT) vx = -2;
if(keyCode==UP && flying==false){ //如果沒有在飛的話,才能飛
vy = -20;
flying = true; // 開始飛行
}
}
void keyReleased(){
if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
}
修改程式碼
void setup(){
size(400,400);
}
float marioX=50, marioY=250, vx=0, vy=0;
void draw(){
background(102,137,255);
marioX += vx;
if(flying){ //如果在飛行
marioY += vy; //上下位置會改變
vy += 0.98; //重力加速度往下
if(marioY >=250){ //碰到地板
marioY = 250; //站在地板上
flying = false; //不再飛行
}
}
fill(255,0,0); ellipse(marioX, marioY, 15,25);
fill(229,119,42); rect(0, 260, 400, 150);
drawAndTestBox(100, 150, 20, 20);
drawAndTestBox(200, 150, 20, 20);
drawAndTestBox(300, 150, 20, 20);
}
void drawAndTestBox(int x, int y, int w, int h){
fill(229,119,42); rect(x, y, w, h);
if(hitBox(x, y, w, h)){
if(vy>0){
marioY = y-10;
flying = false;
stand_box = true;
}else{
vy = 0;
marioY = y+h+10;
}
}
if(stand_box==true && flying==false && leaveBox(x, y, w, h)){
stand_box = false;
flying = true;
vy = 0;
}
}
boolean leaveBox(int x, int y, int w, int h){
if(x-7>marioX || marioX>x+w+7) return true;
else return false;
}
boolean hitBox(int x, int y, int w, int h){
if(x-7<marioX && marioX<x+w+7 && y-10<marioY && marioY<y+h+10) return true;
else return false;
}
boolean flying = false, stand_box=false; //一開始,沒有在飛
void keyPressed(){
if(keyCode==RIGHT) vx = 2;
if(keyCode==LEFT) vx = -2;
if(keyCode==UP && flying==false){ //如果沒有在飛的話,才能飛
vy = -20;
flying = true; // 開始飛行
stand_box = false; //現在有2個變數,都要處理
}
}
void keyReleased(){
if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
}












沒有留言:
張貼留言