Spiel wird während des spiels immer ruckeliger und langsamer

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

emcapone

Betreff: Spiel wird während des spiels immer ruckeliger und langsamer

BeitragMi, Apr 22, 2009 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, hab nach langer zeit ma wieder angefangen an nem alten "spiel" zu programmieren...
ziel war es erstmal nur ein spiel zu machn wo 4spieler über einen server miteinander verbunden sind und sich gegenseitig sehen können. das problem ist, dass es aus irgend einem grund während des spielens immer langsamer wird bis fast garnix mehr geht... versuche schon seit heute morgen herauszu finden woran es liegt....

Code: [AUSKLAPPEN]

Graphics3D 800, 600,32,0
SetBuffer BackBuffer()

;Spielfigur laden
mario1=LoadMesh("dateien\mario.x")
mario2=LoadMesh("dateien\mario.x")
mario3=LoadMesh("dateien\mario.x")
mario4=LoadMesh("dateien\mario.x")
If start=0 Then mario=mario1
;Inet Settings
Global hostport = 27002
Global iphost$ ;IP vom Server
;Bullet laden
Global munition = 10 + munitionx
Global bullet=LoadMesh("dateien\bullet.x")
ScaleEntity bullet, 0.1, 0.1, 0.3
;Auto laden
auto=LoadMesh("dateien\auto.x")
ScaleEntity auto, 0.4, 0.4, 0.4 
;MAP LADEN
Global Testmap=LoadMesh("dateien\Testmap.x")
ScaleEntity Testmap, 2, 2, 2
PositionEntity Testmap, 0, -5, 0
;Auto
ScaleEntity auto, 0.4, 0.4, 0.4 
If start=0 PositionEntity auto,15,-3,-120
;Positioniere Spielfiguren
ScaleEntity mario, 0.4, 0.8, 0.4
If start = 0  PositionEntity mario, -20, 0.1, -50
ScaleEntity mario1, 0.4, 0.8, 0.4
If start = 0  PositionEntity mario1, -40, 0.1, -50
ScaleEntity mario2, 0.4, 0.8, 0.4
If start = 0  PositionEntity mario2, -30, 0.1, -50
ScaleEntity mario3, 0.4, 0.8, 0.4
If start = 0  PositionEntity mario3, -10, 0.1, -50
ScaleEntity mario4, 0.4, 0.8, 0.4
If start = 0  PositionEntity mario4, 5, 0.1, -50
;Kollisionen
Const mario_TYPE=1
Const Testmap_TYPE=2
Const auto_TYPE=3
Const bullet_TYPE=4
EntityType auto,auto_TYPE
EntityType mario,mario_TYPE
EntityType Testmap,Testmap_TYPE
EntityType bullet,bullet_TYPE
Collisions auto_TYPE,mario_TYPE,2,1
Collisions mario_TYPE,Testmap_TYPE,2,2 
Collisions mario_TYPE,auto_TYPE,2,2
Collisions auto_TYPE,Testmap_TYPE,2,2
Collisions bullet_TYPE,testmap_TYPE,2,2
Cls

iphost$=Input ("SERVER IP EINGEBEN" ) ;Server IP eingeben
iphost = integerip(iphost$)            ;IP umwandeln...
stream = CreateUDPStream() ;UDP stream öffnen, und nach bestem port suchen


Repeat ; -------------------!!!!!! HAAAAUPTCHLEIFEEE !!!!----------------------------------
ipx = RecvUDPMsg(stream)
If ipx <> 0 ;wenn nachricht erhalten:

;Alle posi-daten etc werden hier GELESEN
id= ReadByte (stream) ;Id lesen, den der Host uns zuweist
If id<>0 ; wenn kein fehltransfer, positionen abfragen
X1#=ReadFloat(stream)
Y1#=ReadFloat(stream)
Z1#=ReadFloat(stream)

X2#=ReadFloat(stream)
Y2#=ReadFloat(stream)
Z2#=ReadFloat(stream)

X3#=ReadFloat(stream)
Y3#=ReadFloat(stream)
Z3#=ReadFloat(stream)

X4#=ReadFloat(stream)
Y4#=ReadFloat(stream)
Z4#=ReadFloat(stream)
rest=ReadLine(stream)
EndIf
EndIf
;Eigene Daten SCHREIBEN (position,schaden an den anderen etc...)
WriteFloat stream, X#
WriteFloat stream, Y#
WriteFloat stream, Z#


SendUDPMsg stream,iphost,hostport ; SENDEN AN HOST
 


; -------- SPIEL -----------------------------------------------------------
;____________________________________________________________________________
;Kamera für spieler 1-4

If id<>0 ;wenn Mario eine ID zugewiesen wurde,Cam anmachen
camera=CreateCamera(mario)
PositionEntity camera, 0, 25, -20

.MoveCamera
mx#=-.25*MouseXSpeed()
my#=.25*MouseYSpeed()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
TurnEntity mario,0,mx#,0,1
TurnEntity camera,my#,0,0,0
EndIf


;Mario wird eine id zugewisen
If id=1 Then mario=mario1
If id=2 Then mario=mario2
If id=3 Then mario=mario3
If id=4 Then mario=mario4

If start=0 ;wenn spieler inaktiv
Print "Drücken Sie binnen 3Sekunden die Feilhoch-Taste!" ;Spieler soll sich aktivieren
If KeyHit (200) start = 1
Delay(3000)
EndIf

If KeyHit (200) start = 1 ;--------Spiler aktiviert--------
If start=0 Then End 

;Steuerung zu fuß 
If KeyDown(200)  MoveEntity mario,0,0,1.4 
If KeyDown(208)  Then MoveEntity mario,0,0,-1.4
If KeyDown(205)  Then MoveEntity mario,1.4,0,0 
If KeyDown(203)  Then MoveEntity mario,-1.4,0,0
;Steuerung im Auto

If EntityCollided(mario,auto_Type) Then bedingung=1 ;Autofahren
If KeyDown(17)  And bedingung=1 Then MoveEntity auto,0,0,9  PositionEntity mario,EntityX(auto),EntityY(auto),EntityZ(auto)
If KeyDown(33)  And bedingung=1 Then MoveEntity auto,0,0,-7 PositionEntity mario,EntityX(auto),EntityY(auto),EntityZ(auto)
If KeyDown(32)  And bedingung=1 Then TurnEntity auto,0,-3,0  PositionEntity mario,EntityX(auto),EntityY(auto),EntityZ(auto)
If KeyDown(30)  And bedingung=1 Then TurnEntity auto,0,3,0 PositionEntity mario,EntityX(auto),EntityY(auto),EntityZ(auto)

;------------spielerpositionen aktualisieren (außer seine eigene)---------------
If id<>1  PositionEntity mario1,X1#,Y1#,Z1#
If id<>2  PositionEntity mario2,X2#,Y2#,Z2#
If id<>3  PositionEntity mario3,X3#,Y3#,Z3#
If id<>4  PositionEntity mario4,X4#,Y4#,Z4#
WireFrame(0)
UpdateWorld
RenderWorld
Breite = AufloesungX / 2
Hoehe = AufloesungY / 2
;Position ermitteln:
X# = EntityX(mario)
Y# = EntityY(mario)
Z# = EntityZ(mario)
Flip
Until KeyHit(1)
;;;;;;;;;;;;; IP UMWANDELN :::::::::::::::::::::::
Function IntegerIP(IP$)
A1 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,"."))
A2 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,"."))
A3 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,"."))
A4 = Int(IP$)
Return (A1 Shl 24) + (A2 Shl 16) + (A3 Shl 8 ) + A4
End Function


hab versuch ein bisschen ordnung reinzubringen, ich hoffe so ists ok. vielleicht fällt euch ja etwas auf was mir entgangen ist hmm... würde mich freuen Smile thx!

Tankbuster

BeitragMi, Apr 22, 2009 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst die Kamera nur einmal erstellen. Du erstellst in jedem Schleifendurchlauf eine neue Kamera, da ist es nicht wirklich verwunderlich, dass sich das Programm irgendwann aufhängt. Außerdem musst du WireFrame auch nicht jeden Schleifendurchganz nochmal ausführen, einmal reicht Wink
Twitter
Download Jewel Snake!
Windows|Android
 

emcapone

BeitragMi, Apr 22, 2009 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
hey thx für die schnelle anwort, ich probier gleich ma aus Smile

Der_Schläfer

BeitragMi, Apr 22, 2009 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
kleine ergänzung: du könntest dir evtl. merken dass ein abfallen der geschwindigkeit (das meistens mit einer zunahme des speicherverbrauchs einhergeht) in der regel auf ein "speicherleck" hinweist, z.b. eben darauf dass z.b. massenweise entitys erzeugt werden (welche man nicht unbedingt sieht)
 

emcapone

BeitragDo, Apr 23, 2009 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
alles klar merk ich mir! erstmal behoben das problem, hoffentlich bleibts so Smile

Smily

BeitragDo, Apr 23, 2009 8:50
Antworten mit Zitat
Benutzer-Profile anzeigen
und noch ein fehler:

"HAAAAUPTCHLEIFEEE" schreibt sich "Hauptschleife"

grüße,
Smily
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group