|
Author |
Topic: beginnger: Creating Objects (Read 622 times) |
|
roland_g
|
beginnger: Creating Objects
« on: Feb 15th, 2005, 10:15pm » |
|
I am still pretty bad at programming and want to modify this simple bouncing ball programm so it automatically creates a new bouncing ball whenever a ball hits the wall. Unfortunatly I don't quite know how to do this. How to I get the exact coordinates whenever the ball hits the wall and how do I assign a different speed to the dynamically created ball so all the balls don't overlap and move along the same course? Like I said I am still learning, so please bear with me Code: //--------------------------------------------------------- float size; float [] xspeed = new float[3]; float [] yspeed = new float[3]; float xpos, ypos; float xdirection = 1; float ydirection = 1; //--------------------------------------------------------- void setup (){ size (500,500); xpos = width/2; ypos = height/2; xspeed[0] = 0.5; xspeed[1] = 2.8; xspeed[2] = 1.9; yspeed[0] = 3.1; yspeed[1] = 9.3; yspeed[2] = 10.4; framerate(200); } //--------------------------------------------------------- void loop (){ background(#280915); noStroke(); fill(#940B35); smooth(); //----- SPEED CONFIG xpos = xpos +(xspeed[1] * xdirection); ypos = ypos +(yspeed[0] * ydirection); //----- CHANGE HORIZONTAL DIRECTION if (xpos > width-size/2 || xpos < 1+size/2) { xdirection *=-1; } //----- CHANGE VERTICAL DIRECTION if (ypos > height-size/2 || ypos <1+size/2) { ydirection *=-1; } //----- SIZE CHANGE /* if (xdirection < 1){ size = 70; } else{ size = 100;}*/ //----- DRAW ELLIPSE ellipseMode(CENTER_DIAMETER); ellipse(xpos, ypos,size,size); } |
|
|
|
|
|
sspboyd
|
Re: beginnger: Creating Objects
« Reply #1 on: Feb 16th, 2005, 9:49pm » |
|
Hi Roland, Have you seen this tutorial? http://p5.chronotext.org/tutorials/motion_oop/ You might find it helpful. It will introduce you to object oriented programming, and, coincidentally it uses an example program of moving several balls around.
|
gmail.com w/ sspboyd username
|
|
|
roland_g
|
Re: beginnger: Creating Objects
« Reply #2 on: Feb 23rd, 2005, 10:51am » |
|
thanks! I tried another object oriented programming tutorial earlier, but that didn't go over too well. Hope I'll make it work this time Code: Ball ball001; Ball ball002; void setup (){ size (500,500); framerate(30); colorMode(RGB); color tempcolor = color (10,90,255); ball001 = new Ball(tempcolor,width/2,height/2,5,2.4); ball001 = new Ball(tempcolor,width/2,height/2,2.9,3.6); } void loop (){ background(#280915); ball001.draw(); ball002.draw(); ball001.move(); ball002.move(); } class Ball { int size = 50; float xpos; float ypos; float xspeed; float yspeed; color c; int xdirection = 1; int ydirection = 1; Ball (color c_, float xp, float yp,float xs, float ys){ c = c_; xpos = xp; ypos = yp; xspeed = xs; yspeed = ys; } void draw(){ ellipseMode(CENTER_DIAMETER); noStroke(); fill (c); smooth(); ellipse(xpos,ypos,size,size); } void move(){ xpos = xpos +(xspeed * xdirection); ypos = ypos +(yspeed * ydirection); if (xpos > width-size/2 || xpos < 1+size/2){ xdirection *=-1;} if (ypos > height-size/2 || ypos <1+size/2){ ydirection *=-1;} } } |
|
|
« Last Edit: Feb 23rd, 2005, 10:52am by roland_g » |
|
|
|
|
roland_g
|
Re: beginnger: Creating Objects
« Reply #3 on: Feb 23rd, 2005, 2:25pm » |
|
it worked Now this is my first time using classes, does anybody have some tips on how to optimize this code?. thank you Code: Ball[] ball; int objectnumber = 250; void setup (){ background(#280915); size (500,500); framerate(30); ball = new Ball[objectnumber]; for (int i= 0; i < objectnumber; i++){ ball[i] = new Ball(#940B35,random(50,500),random(10,400),random(1,8),random(1,7)); } } void loop (){ background(#280915); for (int i = 0; i < objectnumber; i++){ ball[i].draw (); ball[i].move (); } } class Ball { float size= 5; float xpos; float ypos; float xspeed; float yspeed; color c; int xdirection = 1; int ydirection = 1; Ball (color c_,float xp, float yp,float xs, float ys){ c = c_; xpos = xp; ypos = yp; xspeed = xs; yspeed = ys; } void draw(){ ellipseMode(CENTER_DIAMETER); colorMode(RGB); smooth(); stroke(255,10); //bezier(mouseX,mouseY,0,xpos,ypos,height/2,xpos,ypos); //rect(mouseX,mouseY,10,10); noStroke(); fill (255,40); //push(); //translate(xpos,ypos); //rotate(20); ellipse(xpos,ypos,size+5,size+5); //pop(); fill (c); ellipse(xpos,ypos,size,size); } void move(){ xpos = xpos +(xspeed * xdirection); ypos = ypos +(yspeed * ydirection); if (xpos > width-size/2 || xpos < 1+size/2){ xdirection *=-1; } if (ypos > height-size/2 || ypos <1+size/2){ ydirection *=-1; } } } |
|
|
« Last Edit: Feb 23rd, 2005, 6:37pm by roland_g » |
|
|
|
|
|