Spielgeschwindigkeit konstant halten
Übersicht

![]() |
dowaBetreff: Spielgeschwindigkeit konstant halten |
![]() Antworten mit Zitat ![]() |
---|---|---|
hallo zusammen! ![]() bin neu hier, pogrammiere aber schon länger. hab folgendes problem: ich hab in meinem spiel sind ab und zu stellen an denen mehr 3d-sachen im blickfeld sind und manchmal weniger. je nach dem wird mein spiel langsamer oder schneller. wie kann ich die spielgeschwindigkeit gleich schnell lassen? danke schon im vorraus für die antwort!!! dowa |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
das kannst du mit einem timer machen:
timer=CreateTImer(60) ... Repeat Cls Flip WaitTImer timer Until KeyHit(1) |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
dowa |
![]() Antworten mit Zitat ![]() |
---|---|---|
des bleibt dann immer gleich?! des war ja einfach! DAnke sehr! ![]() |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja tut es ![]() die 60 stellt hierbei die millisekunden dar, wie lange ein durchgang dauern soll ![]() also gibt es 1000/60 ~ 16,7 Durchläufe pro Sekunde |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
Scope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nun ja, ist wirklich recht einfach. fürn anfang reichts, keine ahnung, was du machen willst, aber wenn du einen langsameren rechner hast, der länger als die 60millisekunden für einen Frame braucht, dann läuft das ganze spiel zu langsam.
wenn du das auch noch umgehen willst (für z.b. Multiplayer Spiele ansich unumgänglich), dann solltest du jede Bewegung mit einem Faktor multiplizieren, der sich aus der Differenz zwischen der aktuellen zeit (millisecs()) und der aus dem vorherigen Frame berechnet. Beispiel: Code: [AUSKLAPPEN] faktor=(MilliSecs()-ZeitLetzterFrame)/1000 ZeitLetzterFrame=MilliSecs() moveentity Player,0,0,x*faktor so in der art sollte das dann aussehen. |
||
Roseman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kryan hat Folgendes geschrieben: ja tut es
![]() die 60 stellt hierbei die millisekunden dar, wie lange ein durchgang dauern soll ![]() also gibt es 1000/60 ~ 16,7 Durchläufe pro Sekunde Das ist Murks. Die 60 gibt an, wieviele Bilder pro Sekunde maximal angezeigt werden sollen. (Also hier maximal 60 Durchläufe pro Sekunde) Dadurch kannst du verhindern, daß dein Spiel auf schnelleren Rechnern irrsinnig schnell läuft. Ist also ne obere Schranke, von der Geschwindigkeit her gesehen. Dadurch kannst du nicht verhindern, daß dein Spiel langsamer wird. |
||
![]() |
dowa |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke, gut zu wissen. wenn ich schon mal dabei bin:
ich hab schon ziemliche viele einträge hier gelesen über wasser, feuer, usw. aber noch nie was über schnee-effekte. ich hab zwar brauchbare sprites die in einer sin.welle denn himmel runterkommen und ein weises -terrain als boden aber bin damit irgendwie noch nicht zufrieden. hätte jemand vielleicht eine idee???? ![]() |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
nagut...dann halt so
und wenn du die oben genannte variante benutzen möchtest, geht das so: Repeat Cls If timer<MilliSecs()-60 Then timer=MilliSecs() ... End If Flip Until KeyHit(1) Hoffe, dass es diesmal so richtig ist ![]() ein schleifendurchlauf dauert ca. 60mske |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
dowa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Perfekt! klappt perfekt! ![]() ![]() |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
oha *grübel*
also ich würde das auch mit sprites machen, und dann irgendwie ne weiße linie, so 10*1*1 die dann richtig drehen und runterfallen lassen ^^ probieren hat noch keinem geschadet ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
dowa |
![]() Antworten mit Zitat ![]() |
---|---|---|
des hab ich ja schon. ich dachte eher an so was wie fußabdrücke im schnee oder dieser glitzer-effekt in der realität wenn die sonne auf denn schnee scheint...geht so was? hab nämlich momentan keinen plan wie man des machen könne.. | ||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
fußabdrücke kannst ja so machen:
wenn jede "schneeflocke" ein sprite wäre ( was extrem langsam IST) dann könntest du ja alle schneeflocken, die mit dem spieler kollidieren bisschen nach unten bewegen ![]() und als "spieler" nimmst du dann halt n schönen saftigen schuh *LECKER* ^^ |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
dowa |
![]() Antworten mit Zitat ![]() |
---|---|---|
steh etz irgendwie auf da leitung. ![]() ![]() |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
hab ich mir gedacht -.-
ne bessere lösung fällt mir nicht ein... ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
dowa |
![]() Antworten mit Zitat ![]() |
---|---|---|
dann weis ich schon was ich am wocende mach ![]() |
||
![]() |
Black Spider |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Kryan: jaa, sprites wären seeeeeeeeeeeeeeeeeeeeeeeeeehhhhhhhhhhhhhhhhhhhhhhhhhhhrrrrrrrrr langsam... wenn schon dann single surface, aber ersteinmal
zu den fussabdrücken: Du erstellst dir einen Fussabdruck-sprite, und setzt ihn nach einigen Schritten auf das terrain... Dann hast du Dunkle fussabdrücke auf dem Boden (würd allerdings ne zeitliche begrenzung einbauen, denn sonst zieht das zu viel speicher)... Dafür brauchst du etwas wissen über types... Zum glitzern: du könntest z.B. eine Eisfläche mit EntityAlpha fläche,.7 halb durchsichtig und mit EntityFX fläche,1 glitzern lassen (brauchst dann allerdings ein licht was dann da drauf scheint.) Zu den Schneeflocken: Sprites, oder SingleSurface... das letztere ist recht kompliziert und du sagst ja selbst dass du neu bist. Also Sprites... Da das sehr viel speicher benötigt, würde ich so vorgehen (um das etwas schonender zu machen): Du erstellst dir eine Grosse Textur(512*512, oder 1024*1024), wo zig schneeflocken an zig unterschiedlichen stellen drauf sind (die nicht benötigten stellen bleiben schwarz). Dann erstellst du einen Type, in etwa mit den Feldern: [syntax="bb"] Type schneeflocke Field x, y, z Field Sprite Field bewX Field bewY Field bewZ End Type[/syntax] so... zwischendurch setzt du nen neuen type, mit neuen Schneeflocken (Du texturierst den Sprite mit deiner großen textur) und scalest das ganze auf riesengross. Dann lässt du den Sprite von recht weit oben langsam nach unten segeln (bewY) und vll etwas hin und her schwanken (bewX, bewZ). Da viele Schneeflocken auf einem Sprite sind geht das von der geschwindigkeit her... Wenn die Y Position unter dem Terrain (oder kleiner als sowieso) ist, dann löscht du den Sprite. Das sollte für den anfang reichen, hinterher solltest du allerdings SingleSurface verwenden... |
||
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif |
![]() |
dowa |
![]() Antworten mit Zitat ![]() |
---|---|---|
des mit dem glitzern is ne gute idee, des test ich gleich, danke!!! ![]() aber ich hab nie behaupted das ich neu beim proggen bin! bin erst seit heute bei blitzforum mitglied! ich kenn zwar singlesurface nicht aber ich bin ja hier um noch mehr über bb zu lernen! aber wenns zu kompliziert is(is es viel mit mathe? bin erst in da 8en) dann lass ichs lieber! |
||
![]() |
IronstormErstklassiger Contest-Veranstalter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das du in der 8ten bist hat nichts zu sagen. Es gibt welche hier im Forum die verstehen Mathematische gleichungen die du erst in der 10 ten bekommst.
Blitzmaker PS: Das Proggen an sich ist mit viel Mathe^^ (Koords, Anzahl, Speed etc.) |
||
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium |
![]() |
dowa |
![]() Antworten mit Zitat ![]() |
---|---|---|
@blitzmaker:
des is mir klar. ich auch schon sin cos tan und andere sachen mit denen wir in der schule noch nichts zu tun hatten. ich wollte damit nur sagen dass ich noch nicht so viele grundlagen und anderes zeugsl kann. aber ich glaub das des blitzforum hier mir sehr weiterhelfen wird... ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Kryan, höre auf Scope und Roseman... CreateTimer macht nur Unsinn, für solche Zwecke.
Zitat: dann könntest du ja alle schneeflocken, die mit dem spieler kollidieren bisschen nach unten bewegen
Bei einem Feld voller Schneeflocken? ![]() Zitat: und mit EntityFX fläche,1 glitzern lassen (brauchst dann allerdings ein licht was dann da drauf scheint.)
EntityFx mesh,1 macht das Mesh von jeglicher Lichberechnung unabhängig. Es wird dann nur noch 'leuchtend' dargestellt. Was bedeutet, als würde eine Lichtquelle mit vollem Umfang da drauf scheinen ohne dieses beeinflussen zu können. Also auch dann, wenn AmbientLight 0,0,0 und alle vorhandenen Lichtquellen auf LightColor light,0,0,0 gestellt sind. Zitat: Du erstellst dir eine Grosse Textur(512*512, oder 1024*1024), wo zig schneeflocken an zig unterschiedlichen stellen drauf sind
Große Texturen machen das Spiel bei einigen Grafikkarten extrem langsam. Vor allem dann, wenn diese auch noch über den ganzen Bildschirm gezogen werden. Würde davon nur abraten. Ausserdem geht es nicht wenn der Spieler sich auch setlich bewegen können soll. Das würde den Programmieraufwand unnötig erhöhen. Ich würde den Spieler in eine art virtuelle Box packen wo etwa 200 Sprites oder besser Triangles einzelnd berechnet werden und langsam runter fallen. Schneeflocken die dann durch die Bewegung des Spielers aus der virtuellen Box raus fliegen, werden einfach an der gegenüber liegenden Boxfläche neu positioniert. Sieht realistisch aus. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group