vinTagesworld Flash forum
door W0utah op 17-01-09 om 15:18
Hey, ik ben bezig met het maken van een soort "physics engine", maar al direct in het begin zit ik wat vast.
Ik wil namelijk zwaartekracht toevoegen over mijn hele stage (of toch een movieclips die alle object vasthoud);
Dit is wat ik al heb:
http://physics.woutr.be/physics_test.html Maar nu zit ik met het probleem wanneer het balletje terug op zijn hoogtepunt is moet hij weer naar beneden vallen.
Daarom heb ik deze controle ingebouwd:
actionscript codeif(item.speedY > -0.5)
{
item.speedY *= -1;
}
Maar natuurlijk als de snelheid te laag is loopt alles vast.
Dit is mijn volledige code:
actionscript codeinit();
function init():void {
drawBal();
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
function drawBal():void {
var bal:MovieClip = new MovieClip();
bal.graphics.beginFill(0xFFFFFF);
bal.graphics.drawCircle(20, 10, 10);
bal.graphics.endFill();
bal.speedY = 10;
holder.addChild(bal);
}
function enterFrameHandler(event:Event):void {
for (var i:uint = 0; i < holder.numChildren; i++) {
var item:Object = holder.getChildAt(i);
if (item != "[object Shape]") {
item.y += item.speedY;
// bounce at the floor
if (item.y + item.height >= stage.stageHeight) {
item.speedY = item.speedY / 2;
item.speedY *= -1;
}
// falling down
if (item.speedY >= 0) {
var a:Number = item.speedY - (item.speedY * 0.95);
item.speedY += a;
}
// bouncing up
if (item.speedY < 0) {
item.speedY *= 0.95;
if(item.speedY > -0.5)
{
item.speedY *= -1;
}
}
trace(item.speedY);
}
}
}
Ik ben héél slecht in wiskundige berekeningen, maar onderstaande code werkt wel bij mij ? (enige wat ik gedaan heb is die holder weggewerkt)
actionscript codeinit();
function init():void {
drawBal();
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
function drawBal():void {
var bal:MovieClip = new MovieClip();
bal.graphics.lineStyle(2, 0x000000);
bal.graphics.beginFill(0xFFFFFF);
bal.graphics.drawCircle(20, 10, 10);
bal.graphics.endFill();
bal.speedY = 10;
addChild(bal);
}
function enterFrameHandler(event:Event):void {
for (var i:uint = 0; i < numChildren; i++) {
var item:Object = getChildAt(i);
if (item != "[object Shape]") {
item.y += item.speedY;
// bounce at the floor
if (item.y + item.height >= stage.stageHeight) {
item.speedY = item.speedY / 2;
item.speedY *= -1;
}
// falling down
if (item.speedY >= 0) {
var a:Number = item.speedY - (item.speedY * 0.95);
item.speedY += a;
}
// bouncing up
if (item.speedY < 0) {
item.speedY *= 0.95;
if(item.speedY > -0.5)
{
item.speedY *= -1;
}
}
trace(item.speedY);
}
}
}
door W0utah op 17-01-09 om 16:41
Dat geeft eigenlijk juist hetzelfde resultaat.
Maar het probleem zit hem in de berekening om hem na het botsen terug naar beneden te laten komen.
Dus wanneer hij zijn hoogtepunt bereikt heeft.
Maar bij jouw voorbeeld blijft hij in de lucht hangen, bij mijn
voorbeeld valt hij wel (ook niet echt deftig, maar hij gaat iig)
sidenote, aardig leuke free swf host btw :)
laatst ge-edit op: 17-01-09 om 17:13
door W0utah op 17-01-09 om 17:21
Ow, was vergeten mijn huidige swf te updaten naar de server.
Anyway, de mijne is nu hetzelfde als jouw voorbeeld.
Ik kan misschien beter uitreken hoe hoog de bal gaat botsen en zo controleren.
Straks ff proberen
Dit topic is gesloten.