Hejsan! Nu kraschade datorn precis när jag hade skrivit ett långt inlägg, så jag ställer bara en fråga så orkar jag nog svara sen istället... Hela tilen är alltid helt solid om den är det över huvud taget. Får hoppas att du orkar skriva inlägget sen :) Okej, då gör du något sånt här (och du har fortfarande nytta av att skriva koden även om du sen vill ha halvsolida tiles). Läste din post, jag ska försöka med det där. Läste din post, jag ska försöka med det där. Läste din post. Jag ska försöka med det där. Läste din post. Jag ska försöka med det där. Läste din post. Jag ska försöka med det där. Skulle bara säga att jag löste det sen. Visade sig att det inte var så svårt :/. Gjorde som du sa att man kollar kollisioner innan man flyttar spelaren. Det blev mycket lättare då. :) Tidigare använde jag rektanglar och kollade ifall dom skär in i varandra ( finns en funktion för det, intersectswith() ) för att sedan hindra spelaren att flytta på sig nästa gång. Som sagt det fungerade jättebra innan jag började använda tiles. Kul att det funkade! Kommer jag säkerligen att göra, när det är lite mer färdigt ; )Collision detection mellan banan och spelaren
Jag håller på med ett spel som fungerar ungefär som super mario/megaman. Mitt problem just nu är att jag inte riktigt vet vad jag ska ha för strategi när jag kollar om spel karaktären kan stå där han står eller om det är en dit han gåt osv., ni förstår! Jag hade en fungerande funktion för detta förut men sen gick jag över till tile baserade banor, då blev allt mycket krångligare... Någon som kan berätta lite hur man ska göra?
Lite info om banorna:
50x30 tiles (för tillfället)
varje tile är 16x16 px stora.
Tile systemet fungerar, jag har en klass som heter Tile, och den skapar jag en två-dimensionell array av och sen ritar jag ut en bana som den läser in från en xml fil. varje tile har några egenskaper som t.ex bool solid, bool visible, bool empty, och lite till.
Tacksam för svar!Sv: Collision detection mellan banan och spelaren
Är en hel tile solid eller inte, eller kan det vara så att vissa delar av tiles är solida, men andra inte (till exempel en sluttning eller ett gupp)?Sv: Collision detection mellan banan och spelaren
Sv: Collision detection mellan banan och spelaren
Det beror lite på hur du styr gubben. Jag förutsätter att du har två variabler xstep och ystep, som beskriver hur långt gubben kommer röra sig nästa steg. Har du inte det får du modifiera proceduren så att det stämmer med din metod.
Om du tänker dig att du vill kolla om gubben går från vänster mot höger och du vill veta om han håller på att slå emot en tile. Vi kallar den vänstra delen av den tilen för xtile.
Då blir det krock om följande gäller:
if(x<xtile && x+xstep>xtile)
//en vettig metod för att undvika studsen är att sätta
xstep=xtile-x
Då kommer gubben gå hela vägen fram, men inte längre. Du får även anpassa för gubbens bredd, och göra kollen åt andra hållet (step<0). Helt analogt blir det för y-ledden.
Sen kanske du vill att han ska kunna gå ett litet steg utan att hoppa, har inte tid nu, men återkom så ska vi nog klura ut det med.Sv: Collision detection mellan banan och spelaren
Tänkte jag kunde berätta lite kort om spel loopen ifall du har nån kommentar på den:
<code>
while(lite stuff)
{
//kolla vilka knappar som är nedtryckta
//uppdatera spelaren
//rita ut spelaren
//kolla efter collisioner mellan mapen o spelaren
}
</code>
Jag har en performance timer som mäter hur långt tid en loop tar varje gång, för att sedan när jag ska flytta spelaren (bara om han trycker ner en pil tangent) skriver jag ungefär:
Mario.X += Loopduration * 0.2;
Loopduration är i ms. Detta resulterar i en hastighet på 200px/sec
Just nu flyttar jag spelaren direkt när man trycker på en piltangent (först i loopen). collisionen kollar jag först efter (sist i loopen), skulle den då kollidera hindrar jag spelaren från att röra sig _nästa_ gång. Men det funkar inte så bra, så jag behöver som sagt hjälp med detta, jag kan lätt ändra om allting bara så du vet.(om det skulle vara bättre)
Jag antar att (Loopduration * 0.2) är den där xstep variabeln du snacka om?Sv: Collision detection mellan banan och spelaren
Tänkte jag kunde berätta lite kort om spel loopen ifall du har nån kommentar på den:
<code>
while(lite stuff)
{
//kolla vilka knappar som är nedtryckta
//uppdatera spelaren
//rita ut spelaren
//kolla efter collisioner mellan mapen o spelaren
}
</code>
Jag har en performance timer som mäter hur långt tid en loop tar varje gång, för att sedan när jag ska flytta spelaren (bara om han trycker ner en pil tangent) skriver jag ungefär:
Mario.X += Loopduration * 0.2;
Loopduration är i ms. Detta resulterar i en hastighet på 200px/sec
Just nu flyttar jag spelaren direkt när man trycker på en piltangent (först i loopen). collisionen kollar jag först efter (sist i loopen), skulle den då kollidera hindrar jag spelaren från att röra sig _nästa_ gång. Men det funkar inte så bra, så jag behöver som sagt hjälp med detta, jag kan lätt ändra om allting bara så du vet.(om det skulle vara bättre)
Jag antar att (Loopduration * 0.2) är den där xstep variabeln du snacka om?Sv: Collision detection mellan banan och spelaren
Har lite frågor + jag tänkte jag kunde berätta lite kort om spel loopen ifall du har nån kommentar på den:
<code>
while(lite stuff)
{
//kolla vilka knappar som är nedtryckta
//uppdatera spelaren
//rita ut spelaren
//kolla efter collisioner mellan mapen o spelaren
}
</code>
Jag har en performance timer som mäter hur långt tid en loop tar varje gång, för att sedan när jag ska flytta spelaren (bara om han trycker ner en pil tangent) skriver jag ungefär:
Mario.X += Loopduration * 0.2;
Loopduration är i ms. Detta resulterar i en hastighet på 200px/sec
Just nu flyttar jag spelaren direkt när man trycker på en piltangent (först i loopen). collisionen kollar jag först efter (sist i loopen), skulle den då kollidera hindrar jag spelaren från att röra sig _nästa_ gång. Men det funkar inte så bra, så jag behöver som sagt hjälp med detta, jag kan lätt ändra om allting bara så du vet.(om det skulle vara bättre)
Jag antar att (Loopduration * 0.2) är den där xstep variabeln du snacka om?Sv: Collision detection mellan banan och spelaren
Har lite frågor + jag tänkte jag kunde berätta lite kort om spel loopen ifall du har nån kommentar på den:
<code>
while(lite stuff)
{
//kolla vilka knappar som är nedtryckta
//uppdatera spelaren
//rita ut spelaren
//kolla efter collisioner mellan mapen o spelaren
}
</code>
Jag har en performance timer som mäter hur långt tid en loop tar varje gång, för att sedan när jag ska flytta spelaren (bara om han trycker ner en pil tangent) skriver jag ungefär:
Mario.X += Loopduration * 0.2;
Loopduration är i ms. Detta resulterar i en hastighet på 200px/sec
Just nu flyttar jag spelaren direkt när man trycker på en piltangent (först i loopen). collisionen kollar jag först efter (sist i loopen), skulle den då kollidera hindrar jag spelaren från att röra sig _nästa_ gång. Men det funkar inte så bra, så jag behöver som sagt hjälp med detta, jag kan lätt ändra om allting bara så du vet.(om det skulle vara bättre)
Jag antar att (Loopduration * 0.2) är den där xstep variabeln du snacka om?Sv: Collision detection mellan banan och spelaren
Har lite frågor + jag tänkte jag kunde berätta lite kort om spel loopen ifall du har nån kommentar på den:
<code>
while(lite stuff)
{
//kolla vilka knappar som är nedtryckta
//rita ut banan
//uppdatera spelaren
//rita ut spelaren
//kolla efter collisioner mellan mapen o spelaren
}
</code>
Jag har en performance timer som mäter hur långt tid en loop tar varje gång, för att sedan när jag ska flytta spelaren (bara om han trycker ner en pil tangent) skriver jag ungefär:
Mario.X += Loopduration * 0.2;
Loopduration är i ms. Detta resulterar i en hastighet på 200px/sec
Just nu flyttar jag spelaren direkt när man trycker på en piltangent (först i loopen). collisionen kollar jag först efter (sist i loopen), skulle den då kollidera hindrar jag spelaren från att röra sig _nästa_ gång. Men det funkar inte så bra, så jag behöver som sagt hjälp med detta, jag kan lätt ändra om allting bara så du vet.(om det skulle vara bättre)
Jag antar att (Loopduration * 0.2) är den där xstep variabeln du snacka om?Sv: Collision detection mellan banan och spelaren
Nu löste jag det som så att jag gjorde en ny rektangel av spelaren som hade den position som spelaren skulle ha OM man flyttade på honom. Då är det bara att kolla om den nya rektangeln skär någon tiles rektangel, gör den det flyttar jag spelaren precis bredvid tilen, om inte flyttar jag spelaren hela biten som det var meningen från början.
Tack så mycket för vägledningen! Gjorde att jag fick grepp om situationen!Sv: Collision detection mellan banan och spelaren
Lägg gärna upp programmet på filarean sen. =)Sv: Collision detection mellan banan och spelaren