I’m trying to make a simple game, when the ball falls into certain block, you win.
Mechanics: The ball falls through several obstacles, in the end there are two blocks, if the ball touches the left block you win, the next level will contain more blocks and less space between them.
Test the movie (click on the screen to drop the ball):
http://gabrielmeono.com/downloads/Lucky_Hit_Alpha.swf
These are the main variables:
var winBox:QuickObject;//You win
var looseBox:QuickObject;//You loose
var gameBall:QuickObject;//Ball dropped
Question
Sometimes, the ball will get stock in one of the obstacles and won’t move anymore. Can I kill/remove this object from the scene?
Current Code:
package {
import flash.display.MovieClip;
import com.actionsnippet.qbox.*;
import flash.events.MouseEvent;
import flash.events.Event;
[SWF(width = 600, height = 600, frameRate = 60)]
public class LuckyHit extends MovieClip {
public var sim:QuickBox2D;
var winBox:QuickObject;
var looseBox:QuickObject;
var gameBall:QuickObject;
var simContacts:QuickContacts;
/**
* Constructor
*/
public function LuckyHit()
{
sim = new QuickBox2D(this);
simContacts = sim.addContactListener();
simContacts.addEventListener(QuickContacts.ADD, contactListener);
//sim.createStageWalls();
winBox = sim.addBox({x:5,y:600/30, width:300/30, height:10/30, density:0});
looseBox = sim.addBox({x:15,y:600/30, width:300/30, height:10/30, density:0});
// make obstacles
for (var i:int = 0; i<(stage.stageWidth/50); i++){
//End
sim.addCircle({x:1 + i * 1.5, y:16, radius:0.1, density:0});
sim.addCircle({x:2 + i * 1.5, y:15, radius:0.1, density:0});
//Mid End
sim.addCircle({x:0 + i * 2, y:14, radius:0.1, density:0});
sim.addCircle({x:0 + i * 2, y:13, radius:0.1, density:0});
sim.addCircle({x:0 + i * 2, y:12, radius:0.1, density:0});
sim.addCircle({x:0 + i * 2, y:11, radius:0.1, density:0});
sim.addCircle({x:0 + i * 2, y:10, radius:0.1, density:0});
//Middle Start
sim.addCircle({x:0 + i * 1.5, y:09, radius:0.1, density:0});
sim.addCircle({x:1 + i * 1.5, y:08, radius:0.1, density:0});
sim.addCircle({x:0 + i * 1.5, y:07, radius:0.1, density:0});
sim.addCircle({x:1 + i * 1.5, y:06, radius:0.1, density:0});
}
sim.start();
stage.addEventListener(MouseEvent.CLICK, _clicked);
}
/**
* ..
* @param e MouseEvent.CLICK
*/
private function _clicked(e:MouseEvent)
{
gameBall = sim.addCircle({x:(mouseX/30), y:(1), radius:0.25, density:5});
}
private function contactListener(e:Event)
{
if (simContacts.isCurrentContact(winBox,gameBall))
{
// Won.
trace ('You won!');
}
}
}
}
Make sure you have sleeping enabled. When a body comes to rest, it will “sleep”. You can poll your bodies and see which are sleeping.
Here is a thread on the concept on Box2D.org.
http://www.box2d.org/forum/viewtopic.php?f=9&t=5578