hi,
also wie versprochen hab ich nochmal geschaut. wie gesagt hab ich gerade einiges um die ohren. drum hab ich dir nur nen kleinen prototypen hingeschludert (also so richtig schludrig). was du brauchst sind zwei mcs: level und player
schau es dir einfach mal durch. ich denke als kleine inspiration wirds schon was taugen.
PHP-Code:
const TASTE_HOCH:uint = 38;
const TASTE_RUNTER:uint = 40;
const TASTE_LINKS:uint = 37;
const TASTE_RECHTS:uint = 39;
const g:Number = 9.81 * 2 / stage.frameRate;
const steigungMax = 3;
player.speed = 2;
player.speedX = 0;
player.speedY = 0;
player.sprungkraft = 10;
player.bodenKontakt = level.hitTestPoint(player.x,player.y,true);
var keys:Array = new Array(256);
for (var i:uint=0; i<keys.length; i++)
{
keys[i] = false;
}
function kdh(e:KeyboardEvent):void
{
keys[e.keyCode] = true;
}
function kuh(e:KeyboardEvent):void
{
keys[e.keyCode] = false;
}
function efh(e:Event):void
{
playerInput();
physics(player);
info.text = "" + player.bodenKontakt.toString() + "\n" + clippingOben(player) + "\n" + clippingUnten(player);
}
function playerInput():void
{
if (keys[TASTE_LINKS] == true && keys[TASTE_RECHTS] == false)
{
player.speedX = - player.speed;
}
else if (keys[TASTE_LINKS]==false && keys[TASTE_RECHTS]==true)
{
player.speedX = player.speed;
}
else
{
player.speedX = 0;
}
if (keys[TASTE_HOCH] == true && player.bodenKontakt == true)
{
player.speedY = - g * player.sprungkraft;
}
}
function physics(obj:MovieClip):void
{
obj.speedY += g;
if(obj.bodenKontakt){
//kontollverlust >> rutschen
if(abrutschen(obj)){
return;
}
}
schwerkraft(obj);
clippingUnten2(obj);
gehen(obj);
}
function abrutschen(obj:MovieClip):Boolean{
if(level.hitTestPoint(obj.x-1, obj.y-(steigungMax+1), true) && level.hitTestPoint(obj.x+1, obj.y+(steigungMax+1), true) == false){
obj.x ++;
return true;
}else if(level.hitTestPoint(obj.x+1, obj.y-(steigungMax+1), true) && level.hitTestPoint(obj.x-1, obj.y+(steigungMax+1), true) == false){
obj.x --;
return true;
}
return false;
}
function gehen(obj:MovieClip):void
{
var vX:int = obj.speedX/(Math.abs(obj.speedX));
for (var i = Math.abs(obj.speedX); i>0; i--)
{
if (level.hitTestPoint(obj.x + vX, obj.y - steigungMax, true) == false)
{
obj.x += vX;
}
}
clippingUnten(obj);
}
function schwerkraft(obj:MovieClip):void
{
var vY:int = obj.speedY/(Math.abs(obj.speedY));
for (var i = 0; i<Math.abs(obj.speedY); i++)
{
if ((clippingUnten2(obj) == false || obj.bodenKontakt) && (clippingOben(obj)==false))
{
obj.y += vY;
}
else
{
return;
}
}
}
function clippingUnten2(obj:MovieClip):Boolean
{
obj.bodenKontakt = level.hitTestPoint(obj.x,obj.y + 1,true);
if (level.hitTestPoint(obj.x,obj.y,true) == false)
{
return false;
}
while (level.hitTestPoint(obj.x, obj.y, true))
{
obj.y--;
}
obj.speedY = 0;
obj.bodenKontakt = true;
return true;
}
function clippingUnten(obj:MovieClip):Boolean
{
if (level.hitTestPoint(obj.x,obj.y,true) == false)
{
return false;
}
while (level.hitTestPoint(obj.x, obj.y, true))
{
obj.y--;
}
return true;
}
function clippingOben(obj:MovieClip):Boolean
{
if (level.hitTestPoint(obj.x,obj.y - 1,true) == false)
{
return false;
}
while (level.hitTestPoint(obj.x, obj.y-1, true))
{
obj.y++;
}
obj.speedY = 0;
return true;
}
stage.addEventListener(Event.ENTER_FRAME, efh);
stage.addEventListener(KeyboardEvent.KEY_DOWN, kdh);
stage.addEventListener(KeyboardEvent.KEY_UP, kuh);
mfg
sx