Wie gesagt ich habe einen komischen Fehler mit Floats oder soetwas.
Ich habe in einer Schleife diese Funktion:
Spoiler anzeigen
Code
void Player::Move(Terrain terr) //Terrain.GetMapXY: Funktion um Mapfeld zurückzukriegen
{//px,py,dx,dy: floats, feldx,feldy: ints
if (st.t.Get()>=st.ticks+REMP) //st.t.Get: Eigene Timerfunktion die so wie in Autoit ist, REMP=10
{
st.ticks=st.t.Get();
//Keys
if (st.Key(0x25)==1) //left //st.Key: In Autoit:_IsPressed
{
dx-=PS/5.0f;//PS=1
if (dx<-MaxPlayerSpeed) dx=-MaxPlayerSpeed;
}
else
{
if (dx<0) dx+=PS/5.0f;
}
if (st.Key(0x27)==1) //right
{
dx+=PS/5.0f;
if (dx>MaxPlayerSpeed) dx=MaxPlayerSpeed;
}
else
{
if (dx>0) dx-=PS/5.0f;
}
if (st.Key(0x26)==1) //up
{
if (jumping<1)
{
jumping+=0.05f; //longer fly: 0.0005f normal: 0.05f
dy-=(1.0f-((jumping)*PS))*2.5f;
}
}
//Gravity
dy=0.99f*dy+0.8f;
//Check for Ground
if (terr.GetMapXY(feldx,feldy-1)!=4 && py<=0 && feldy>0)
{
if (dy<0)
{
dy=0.0f;
}
py=0.0f;
}
if (terr.GetMapXY(feldx,feldy+1)!=4 && py>=0 && feldy<15)
{
int t=terr.GetMapXY(feldx,feldy+1);
if (t!=3)
{
py=0.0f;
if (dy>0) dy=0.0f;
}
if (t==3)
{
py=0.0f;
if (dy>0) dy=0.0f;
//Show Game over // Set Lives // Set FeldXY // ##############################
}
jumping=0;
}
if (terr.GetMapXY(feldx-1,feldy)!=4 && px<=0 && feldx>0)
{
px=0.0f;
if (dx<0) dx=0.0f;
}
if (terr.GetMapXY(feldx+1,feldy)!=4 && px>=0 && feldx<20)
{
px=0.0f;
if (dx>0) dx=0.0f;
}
//Move
px+=dx;
py+=dy;
if (px>40) { px= 0; feldx+=1; }
if (px< 0) { px=40; feldx-=1; }
if (py>40) { py= 0; feldy+=1; }
if (py< 0) { py=40; feldy-=1; }
if (feldx<0) { px=0; feldx=0; dx=0.0f; }
if (feldy<0) { py=0; feldy=0; dy=0.0f; }
if (feldx>=19 && px>0) { px=0; feldx=19; dx=0.0f; } //#############################################
if (feldy>=14 && py>0) { py=0; feldy=14; dy=0.0f; } //#############################################
}
}
Alles anzeigen
Wenn ich jetzt rechts drücke, dann kommt beim zweiten durchlauf eine komische Zahl heraus, Runden hab ich schon versucht aber es klappt nicht (liegt nicht an der Funktion) und später wechselt es plötzlich zwischen 2 Zahlen hin und her (wenn keine Taste gedrückt wird) sodass px immer weiter sinkt. Wenn ich links dann länger drücke geht es wieder weg.
Wäre gut und nett wenn ihr mir helfen könntet
EDIT:
Komplettes Projekt:
http://solidfiles.com/d/3a21/