Pong spel i Console
Hej
Jag har gjort början till ett pongspel det jag inte gjort är den lillakulan.
Hur skall jag kunna få kulan att gå i en speciell hastighet samtidigt som man skall kunna röra "racket" i realtid.
Kom gärna med flera olika förslag för jag antar att man kan göra detta flera sätt.
M.V.H. Jonas
Svara
Sv: Pong spel i Console
Principen är nästan alltid densamma. Du har en gameloop. Varje varv i loopen tar du emot user input, och låter din omgivning reagera. För att få någonting att röra sig en viss hastighet bestämmer du hastigheten, tar reda på hur lång tid det har tagit sen förra varvet i loopen, och räknar ut ny position utifrån det.
input kan du inte få med något som låter datorn stanna upp, så det finns inget sätt i standard C++ att lösa det. Hur du löser beror på vilken plattform du använder och vilka bibliotek du har tillgång till.
Alltså i pseudokod:
environment e;
time lasttime, thistime;
while(userinput != quit){
userinput=getuserinput();
e.react(userinput);
lasttime=thistime;
thistime=now();
e.tick(thistime-lasttime);
}
Svara
Sv:Pong spel i Console
Kan man göra en loop som kör hela tidan och bara utför flytten om en tangent trycks ner, allts så att loopen hela tiden går runt fast om nåt är intryckt så flyttas racket sen forstätter loopen bara.
Och sen sätter man att kulan skall flytta sej efter tex 100 cyklar i loopen.
Fast det finns kanske en nackdel med en sån funktion, det är ju att knappen måste vara intryckt just när man kommer till den delen i loopen vilket då innebär att man kan få en fördröjning vid inmatning
Hoppas du förstår vad jag menar.
Fast det kanske är det du menar med din pseudokod, hängde inte riktigt med på den pseudokoden.
Tack så mycket för svaret.
M.V.H. Jonas
Svara
Sv: Pong spel i Console
<b>>Kan man göra en loop som kör hela tidan och bara utför flytten om en tangent trycks ner, allts så att loopen hela tiden går runt fast om nåt är intryckt så flyttas racket sen forstätter loopen bara.</b>
Njae... alltså... antingen så är det som ska inträffa något som är en omedelbar händelse - till exempel en knapp som tar upp en meny. Då reagerar man direkt och gör det.
Annars så är allt tidsberoende. Vad som händer beror på hur länge man håller inne något. Och då får du börja räkna tider som saker sker.
<b>>Och sen sätter man att kulan skall flytta sej efter tex 100 cyklar i loopen.</b>
Räkna aldrig i cykler, räkna i tid. Säg att den har en hastighet på 20 pixlar per sekund. Sen tar du fram antalet sekunder det har gått mellan "detta varvet" och "förra" (förmodligen en hundradels eller tusendels), och öka positionen enligt det. (Detta kan ge problem med cancellation, men det här är principen).
<b>>Fast det finns kanske en nackdel med en sån funktion, det är ju att knappen måste vara intryckt just när man kommer till den delen i loopen vilket då innebär att man kan få en fördröjning vid inmatning</b>
Det beror helt på vilka funktioner du har tillgång till. Ta reda på vad du ska använda först.
Svara