Spielgeschwindigkeit konstant halten

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

dowa

Betreff: Spielgeschwindigkeit konstant halten

BeitragFr, Feb 17, 2006 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo zusammen! Very Happy
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

BeitragFr, Feb 17, 2006 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 17, 2006 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
des bleibt dann immer gleich?! des war ja einfach! DAnke sehr! Very Happy

Kryan

BeitragFr, Feb 17, 2006 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ja tut es Wink
die 60 stellt hierbei die millisekunden dar, wie lange ein durchgang dauern soll Very Happy
also gibt es 1000/60 ~ 16,7 Durchläufe pro Sekunde
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Scope

BeitragFr, Feb 17, 2006 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 17, 2006 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Kryan hat Folgendes geschrieben:
ja tut es Wink
die 60 stellt hierbei die millisekunden dar, wie lange ein durchgang dauern soll Very Happy
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

BeitragFr, Feb 17, 2006 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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???? Question

Kryan

BeitragFr, Feb 17, 2006 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Very Happy
ein schleifendurchlauf dauert ca. 60mske
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

dowa

BeitragFr, Feb 17, 2006 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Perfekt! klappt perfekt! Very Happy is ja supii hier!! hät nicht gedacht das das so schnell geht! danke! aber zurück zu meinem "schnee". jemand ne Idea ??

Kryan

BeitragFr, Feb 17, 2006 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

dowa

BeitragFr, Feb 17, 2006 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 17, 2006 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
und als "spieler" nimmst du dann halt n schönen saftigen schuh *LECKER* ^^
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

dowa

BeitragFr, Feb 17, 2006 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
steh etz irgendwie auf da leitung. Embarassed warum die schneeflocken nach unten bewegen? wie könt ich des mit den schneeflocken anders machen? is nämlich echt zimlich langsam mit... Sad

Kryan

BeitragFr, Feb 17, 2006 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
hab ich mir gedacht -.-
ne bessere lösung fällt mir nicht ein... Rolling Eyes
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

dowa

BeitragFr, Feb 17, 2006 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
dann weis ich schon was ich am wocende mach Wink aber wie gleich ich dann die schuh-sprites(als sprites wärs am besten odre?) an mein terrain an?

Black Spider

BeitragFr, Feb 17, 2006 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragFr, Feb 17, 2006 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
des mit dem glitzern is ne gute idee, des test ich gleich, danke!!! Very Happy

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!

Ironstorm

Erstklassiger Contest-Veranstalter

BeitragFr, Feb 17, 2006 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Feb 18, 2006 0:34
Antworten mit Zitat
Benutzer-Profile anzeigen
@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... Very Happy

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Feb 18, 2006 2:11
Antworten mit Zitat
Benutzer-Profile anzeigen
@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? Shocked Und wenn der nächste Level in der Wüste spielt, dann wird halt jedes Sandkorn einzelnd auf Kollision zu jedem anderem Sandkorn berechnet! Ausserdem: Wo sollen sie denn hinbewegt werden, wenn sie bereits auf dem Boden gefallen sind? Und weiteres würde man es garnicht sehen, da das Schneeflocken-Feld keine ganze Fläche ist und somit keine Schattenberechnung an den Fussabdrücken durchgefürt wird.

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.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group