sehr starke verzögerung

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Medabots1992

Betreff: sehr starke verzögerung

BeitragSo, Aug 28, 2005 10:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe ne sehr starke verzögerung ich ging dann zum Task-manager und sah das der prozessor auf 100% ist wenn ich mein game starte warum?
Allein das spiel nimmt schon 95% kann es sein das ich es falsch programmiert habe? KAUM werden alles angezeigt nur block und nen text und es ist so lahm warum ist es auf 100% wenn nur so wenig angezeigt ist?
Da ist doch nix drin das den PC so lahm machen kann oder doch?[/quote]

skey-z

BeitragSo, Aug 28, 2005 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Lädst du vielleicht Bilder in der schleife?

wenn ja, dann setzt diese vor die schleife und in der schleife nur zeichnen.

ansonsten können wir dir besser helfen, wenn du uns deinen code mal zeigst, sonst kann man nur ins dunkle raten, woran es liegen "könnte"
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

Florian

BeitragSo, Aug 28, 2005 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

ich habe ne sehr starke verzögerung ich ging dann zum Task-manager und sah das der prozessor auf 100%


Das Problem kann man mit den Befehl waitTimer umgehen.

Timer=CreateTimer(85)

Hauptschleife
...
WaitTimer Timer

dimaster

BeitragSo, Aug 28, 2005 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,
@florian du hast das problem glaube ich falsch verstanden wenn du waittimer machst wird die frame rate fals sie über 85 ist auf 85 reduziert aber er hat eine Verzögerung und nicht eine zu hohe framerate!!!!

@Medabots poste doch mal den code hier vieleicht findet dann jemand den fehler!!!

mfg dimaster
 

Florian

BeitragSo, Aug 28, 2005 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast mich falsch verstanden.
Ich will nicht frame rate reduziert sonder mit den Befehl waittimer die CPU-Zeit reduziert.

Wenn man den Befehl verwendet haben alle andere Programme genung CPU-Zeit.
 

feider

ehemals "Decelion"

BeitragSo, Aug 28, 2005 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
genau.
dadurch muss weniger berechnet werden.
 

Medabots1992

BeitragSo, Aug 28, 2005 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok ich hab den code wieder verbessert leider kann man den code eindeutig ausprobieren wenn man im netzwerk ist per IP-Adresse.
Ich habe herausgefunden wenn ich die hauptschleife kann weg lösche das es trotzdem noch so viel hat. ja dann schicke ich mal den code. Hier ist der:
BlitzBasic: [AUSKLAPPEN]
Graphics 640,320,16,2
;Grafik erstellen
Bild = CreateImage (10,50)
SetBuffer ImageBuffer (Bild)
For x=0 To 10
Line X+0,0,X+0,50
Next
SetBuffer BackBuffer()
Global xx# = 300.0, yy# = 300.0
Global angle# = Rnd( 0, 359 )
Global speed# = 2

;--------------------------------------------------------
Print \"Sample UDP Communications\"

Inp_Port=4000
Out_Port=4001

Print \"LOCAL IP:\"
player = 0
ip_count=CountHostIPs(GetEnv(\"localhost\"))
For i=1 To ip_count
Print DottedIP(HostIP(1))
Next

Print \"Enter Destination IP#: xxx.xxx.xxx.xxx\"
Dest_IP$=Input$(\">\")
;Dest_IP$=\"192.168.178.21\"
IP= INT_IP(Dest_IP$)
online = 1762
Print \"\"
Print \"Starting Chat TO quit\"

udp_rd=CreateUDPStream(Inp_Port)
udp_wr=CreateUDPStream(Out_Port)

.loop
;---------------------------------------------------------
Cls
Y=MouseY()
X=MouseX()
If player = 1 Then

Else

EndIf
klick = 1761
bildX = xx# + 640
bildY = yy# + 640 + 640
gsu=se#+1800
;Print

If MilliSecs() > zeit2 Then
zeit2 = MilliSecs() + 100
If onlines = 2 Then
WriteShort(udp_wr,Y)
SendUDPMsg udp_wr,IP,Inp_Port
EndIf
If MilliSecs() > zeit Then
zeit = MilliSecs() + 0
EndIf
If player = 1 Then
;WriteShort(udp_wr,bildX)
;SendUDPMsg udp_wr,IP,Inp_Port
;WriteShort(udp_wr,bildY)
;SendUDPMsg udp_wr,IP,Inp_Port

EndIf
EndIf
If Not onlines = 2 Then
If player = 1 Then
;WriteShort(udp_wr,klick)
;SendUDPMsg udp_wr,IP,Inp_Port
EndIf
If wait = 1764 Then
WriteShort(udp_wr,wait)
SendUDPMsg udp_wr,IP,Inp_Port
wait=0
EndIf
If player = 0 And MilliSecs() > zeit31 Then
zeit31 = MilliSecs() + 100
.sende
WriteShort(udp_wr,online)
SendUDPMsg udp_wr,IP,Inp_Port
byte1=0
EndIf
EndIf
If player = 1 And MilliSecs() > zeit9 Then
zeit9 = MilliSecs() + 200
WriteShort(udp_wr,bildX)
SendUDPMsg udp_wr,IP,Inp_Port
WriteShort(udp_wr,bildY)
SendUDPMsg udp_wr,IP,Inp_Port
angles#=angle# + 1766
WriteShort(udp_wr,angles#)
SendUDPMsg udp_wr,IP,Inp_Port
EndIf
If player = 1 Then

WriteShort(udp_wr,gsu)
SendUDPMsg udp_wr,IP,Inp_Port
EndIf
If Not gesendet$ = \"ja\" Then If nix=1 Or player=1 And MilliSecs() > zeit5 Then
player=1
nixe=1763
zeit5 = MilliSecs() + 700
WriteShort(udp_wr,nixe)
SendUDPMsg udp_wr,IP,Inp_Port
gesendet$=\"ja\"
;Oval X,Y,20,20,1
If Not gesendet$=\"ja\" Then gesendet$=\"nein\"
EndIf
Text 100,0,zeit
Text 100,20,MilliSecs()
Text 100,40, bildX
Text 100,60, bildY
Text 130,40, BallX
Text 130,60, BallY
Text 300,300, ges#
Text 350,300, gsu
Text 000,280, \"Wurde der Datenaustausch erfolgreich abgeschlossen? \"+gesendet$
IP_rd=RecvUDPMsg(udp_rd)

If IP_rd <> 0 Then
Buflen=ReadAvail(udp_rd)
If Buflen> 0 Then
byte1=ReadShort(udp_rd)
If byte1=13 Then
Print
Else
;Write Chr$(byte1)
EndIf
EndIf
EndIf
;--------------------------------siegnalle trennen----------
If byte1>-1 And byte1<641 Then GY=byte1
If byte1>640 And byte1<1281 Then BallX=byte1-640
If byte1>1280 And byte1<1761 Then BallY=byte1-1120
If byte1=1762 Then nix=1 player=1
If byte1=1763 Then player = 2
If byte1>1799 Then ges#=byte1-1800
If byte1=1764 Then Goto sende
If byte1>1766 And byte1<1800 Then angle#=byte1-1766
;--------------------------------siegnalle trennen----------
If onlinese = 2 Then byte1 = 2 Or byte2 = 2
If nix=1 Or byte1=1762 Then onlines = 2
If onlines = 2 Then
If player = 2 Then
DrawImage Bild,630,GY-25
DrawImage Bild,0,Y-25
Else
DrawImage Bild,0,GY-25
DrawImage Bild,630,Y-25
Text 200,200,Y
Text 200,220,GY
EndIf
;----------------------------------------Ball---------------
If player = 1 Then
xx# = xx# + Cos ( angle# ) * speed#
yy# = yy# + Sin ( angle# ) * speed#
Else
BallX = BallX + Cos( angle# ) * speed#
BallY = BallY + Sin( angle# ) * speed#
EndIf
If yy# > 320 Or yy# < 0 Then

angle# = 360 - angle#

EndIf

If xx# < 0 Or xx# > 640 Then

angle# = 180 - angle#

EndIf
If player = 2 Then
If BallY > 320 Or BallY < 0 Then
angle# = 360 - angle#
EndIf
If BallX < 0 Or BallX > 640 Then
angle# = 180 - angle#
EndIf
EndIf
If xx#-6 < 10 And xx#-6 > 0 And yy# < X-25+50 And yy# > X-25 Then angle# = 180 - angle#
speede = speed# - 1
Text 0,0,\"Stufe:\" + speede
Text 0,20,se#
Text 0,40,ses#
If player = 1 Then
Text 0,60,BallX
Text 0,80,BallY
Else
Text 0,60,xx#
Text 0,80,yy#
EndIf
Text 0,100,player
;If x# >
If player = 1 Then Oval xx#-5, yy#-5, 10, 10, 1
;---------------------------------Ballsynchron--------------
If player = 2 Then
Oval BallX-5, BallY-5, 10, 10, 1
EndIf
;---------------------------------Ballsynchron--------------
If ImageRectCollide(Bild, 0, Y-25, 0, xx#-5, yy#-5, 10, 10) Or ImageRectCollide(Bild, 0, Y-25, 0, BallX-5, BallY-5, 10, 10) Then
angle# = 180 - angle#
If player = 1 Then
se# = se# + 1
Else
se# = ges#
EndIf
ses# = se# / 20
speed# = 2 + ses
EndIf
If ImageRectCollide(Bild, 630, Y-25, 0, xx#-5, yy#-5, 10, 10) Or ImageRectCollide(Bild, 630, Y-25, 0, BallX-5, BallY-5, 10, 10)Then
angle# = 180 - angle#
If player = 1 Then
se# = se# + 1
Else
se# = ges#
EndIf
ses# = se# / 20
speed# = 2 + ses
EndIf
;----------------------------------------Ball---------------
If byte1 = 1761 Then
player = 2
EndIf
Else
Text 30,140, \"waiting for a opponent\"
If MilliSecs() > zeitler Then wait = 1764 zeitler = MilliSecs() + 1500
If byte1 = 1761 Then
onlinese = 2
EndIf
EndIf
If KeyDown(1) Then Goto quit
Flip
Goto loop

.quit
CloseUDPStream udp_wr
CloseUDPStream udp_rd

Function INT_IP(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
End

Ich wollte Pong nach programmieren für netzwerk haut aber net so richtig hin Sad der ball will einfach net gleich fliegen und an der selben posy sein wie beim andern rechner und er zuckt immer so Sad ich hoffe jemand kann mir helfe die 85% zu reduzieren und das es schneller geht weil die daten werden später angezeigt wenn ich aber alle programme schließe und das dann starte ist es zwar gleich aber trotzdem noch 3% unter 100% und da fehlt noch ein prog und mein game wird total langsam ich hoffe wenn es aufgehoben ist das der ball früher am anderen PC gesendet wird und vorallem die balken. Ehm das ist eine komische art daten zu senden aber sie funktioniert. Jo dann hoffe ich, dass das problem bald weg ist damit ich es richtig testen kann man braucht ein 3,0Ghz prozessor damit das spiel nicht über 70% steigt !! Hab ich bei meinem freund getestet! da war es aber noch net so weit hier der code als ich es mit meinem freund gemacht hab.
BlitzBasic: [AUSKLAPPEN]
Graphics 640,480,16,2
SetBuffer BackBuffer()
Print \"Sample UDP Communications\"

Inp_Port=4000
Out_Port=4001

Print \"LOCAL IP:\"

ip_count=CountHostIPs(GetEnv(\"localhost\"))
For i=1 To ip_count
Print DottedIP(HostIP(1))
Next

Print \"Enter Destination IP#: xxx.xxx.xxx.xxx\"
Dest_IP$=Input$(\">\")
IP= INT_IP(Dest_IP$)

Print \"\"
Print \"Starting Chat TO quit\"

udp_rd=CreateUDPStream(Inp_Port)
udp_wr=CreateUDPStream(Out_Port)

.loop
Cls
If KeyDown(203) Then Y=1
If KeyDown(205) Then Y=3
If Not KeyDown(203) Or KeyDown(205) Then Y=2
Print
WriteShort(udp_wr,Y)
SendUDPMsg udp_wr,IP,Inp_Port
;Oval X,Y,20,20,1


IP_rd=RecvUDPMsg(udp_rd)

If IP_rd <> 0 Then
Buflen=ReadAvail(udp_rd)
If Buflen> 0 Then
byte1=ReadByte(udp_rd)
If byte1=13 Then
Print
Else
Write Chr$(byte1)
EndIf
EndIf
EndIf
If KeyDown(1) Then Goto quit
Oval byte1*20,Y,20,20,1
Flip
Goto loop

.quit
CloseUDPStream udp_wr
CloseUDPStream udp_rd

Function INT_IP(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

So das wars dann und ich probiere schon heut den ganzen tag rum wie ich es lösen kann Sad leider hänge ich fest am Ball. Aber sonst alles geht gut und alle Variablen kommen richtig an bis vielleicht auf die BallKoordinaten weil die werden ja net gleich gesendet sonstern an den werten angepasst aber es geht Smile das war aber meine einzigste möglichkeit weil mit TCP oder anderer möglich kann ich es net und UDP mach zumindest nicht diesen fester auf die IPs werden auf ner datei im netz gespeichert und man muss dann später nur auf das Spiel klicken um sich mit dem spieler zu verbinden.

dimaster

BeitragSo, Aug 28, 2005 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Embarassed ah oops dann sorry florian !!!

mfg dimaster

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group