met collision line kan je testen of je iets tegenkomt
Omdat
collision_line maar één lijntje checkt, kan het alsnog zijn dat hij een obstakel niet opmerkt. Ik probeer juist iets pixelperfects te krijgen.
zoja, gebruik een while loop om je snelheid te laten afnemen tot het punt waarop je door kan
daarnaast doet het laatste probleem zich niet voor als je naar een lagere y positie zoekt, als je zorgt dat je de y alleen laat afnemen. je hoeft niet de y te verhogen als je een helling afloopt, want daar heb je de gravity al voor.
Hoe wil je daarvoor zorgen? In mijn voorbeeld kan dat bijvoorbeeld niet als je in dat hoekje zit; omdat je niet door die helling heen kan. En over je laatste zin: hoe maak ik onderscheid tussen naar beneden gaan om uit dat hoekje bij het voorbeeld te komen, of om naar beneden te gaan van een helling?
die gravity.. die Y is wel handig als je wilt dat hij niet steeds 2 pixels naar links gaat, dan 2 pixels naar beneden valt etc. je wil dat hij
/
zo gaat en niet
_
|/
waarin het rode het pad is van de speler en het zwarte de slope.
Dat klopt. Echter, als je het volgens de onderste methode doet, en daarna de y juist corrigeert, zie je daar niet(s)/ (veel) van. Dat geeft TrevoriuS ook aan.
Je moet ook rekening houden met springen wat niet vanuit de lucht mogelijk is (alleen met 'grond' onder je), want als je zoals blackhawk zegt naar beneden gaat, kun je dan bijna niet springen, omdat je telkens in de lucht zit. Je moet dan eerst stil gaan staan, dan wachten tot je naar beneden bent gevallen, en dan pas springen.
Maar wanneer je het volgens die tweede methode van blackhawk doet en zorgt dat die y-correctie gebeurt ná het horizontaal bewegen, eindig je dus wel op de grond. Het is inderdaad wel een punt; je moet zorgen voor een zodanige zwaartekracht dat je niet hoeft te wachten tot je naar beneden bent gevallen, zoals jij aangeeft.

Oja, en om het vallen niet sneller te laten gaan met die i=-10, moet je gewoon kijken of dat je valt, of dat je een schuine helling af loopt, lijkt me niet zo heel moeilijk.
Tja... Feitelijk is het van zo'n schuine helling aflopen net zoiets als vallen alleen dan korter.
Ik heb nu deze code:
var i,stop,found;
stop=0;
repeat(abs(h_speed))
{
for (i=0; i<5; i+=1;)
{
if place_free(x+sign(h_speed),y-i)
{
x+=sign(h_speed);
y-=i;
found=1;
break;
}
else
{
if i=4
found=0;
}
}
if found=0
{
for (i=0; i<5; i+=1;)
{
if place_free(x+sign(h_speed),y+i)
{
x+=sign(h_speed);
y+=i;
break;
}
else
{
if i=4
{
h_speed=0;
stop=1;
}
}
}
if stop
break;
}
}
Ik beweeg dus elke pixel afzonderlijk, zodat je geen obstakels over het hoofd ziet en zodat je niet op een bepaalde afstand van een obstakel blijft staan bij een hoge snelheid.
Verder geeft
h_speed de horizontale snelheid weer (positief is beweging naar rechts, negatief naar links). Ik heb het probleem opgelost met het bij
i=-10; beginnen door eerst te kijken of we naar boven kunnen, indien niet (
found=0;) dan kijken we of we naar beneden kunnen. Zo los ik het probleem op dat je vast kan komen te zitten.
Die
stop-variabele is ervoor, zodat op het moment dat je én niet naar boven én niet naar beneden een vrije y-positie kan vinden, de
repeat-loop stopt. Als het immers één keer niet kan dan kan het de hele tijd natuurlijk niet.
Nadeel aan deze code is, dat per horizontale pixel, er wel 5 verticale pixels bewogen kunnen worden. Dit zorgt ervoor dat je een stuk sneller gaat op heel stijle hellingen dan op horizontaal terrein...