Netzerk

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

adnan3379

Betreff: Netzerk

BeitragSo, Jul 10, 2011 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
hi, bin jetzt seit 2 tagen dabei und hab auch viele sachen ausprobiert. Nun wollte ich mich ans netzwerken ranmachen aber habs irgendwie garnicht kapiert. Hier ist zb mein kleines spielchen und wüsste nicht wie man es zb. mit 3 personen 3 kugel hin und her bewegen kann.
Code: [AUSKLAPPEN]
Graphics3D 800,600,16
SetBuffer BackBuffer()
AppTitle "Tests"



Global ablauf = MilliSecs()
Global sphere

Const cube11=1
Const sphere11=2






Function springen ()

 If ablauf <= MilliSecs() - 500 Then
MoveEntity sphere, 0, 30, 0
      ablauf = MilliSecs()
 
   EndIf
End Function





While Not KeyHit(1)






Collisions sphere11,cube11,2,3
Collisions sphere11,cube22,2,3



cube = CreateCube()
RotateEntity cube, 0, 0, 0
PositionEntity cube, 20, 2, 5
ScaleEntity cube, 100,10,100
EntityType cube,cube11



cube = CreateCube()
RotateEntity cube, 0, 0, 90
PositionEntity cube, 20, 2, 5
ScaleEntity cube, 100,10,100
EntityType cube,cube11




cube = CreateCube()
RotateEntity cube, 0, 0, 0
PositionEntity cube, 40, 20, -25
ScaleEntity cube, 10,10,10
EntityType cube,cube11


cube = CreateCube()
RotateEntity cube, 0, 0, 0
PositionEntity cube, 40, 40, 5
ScaleEntity cube, 10,10,10
EntityType cube,cube11


cube = CreateCube()
RotateEntity cube, 0, 0, 0
PositionEntity cube, 40, 60, 15
ScaleEntity cube, 10,10,10
EntityType cube,cube11

cube = CreateCube()
RotateEntity cube, 0, 0, 0
PositionEntity cube, 40, 80, 35
ScaleEntity cube, 10,10,10
EntityType cube,cube11


sphere = CreateSphere()
PositionEntity sphere, 50,50, 2
ScaleEntity sphere, 4,4,4
EntityType sphere,sphere11
EntityColor sphere ,11,11,51







camera = CreateCamera(sphere)
PositionEntity camera, 0, 40, -50
TurnEntity camera,30,0,0


light2 = CreateLight()
LightColor light2, 256,0,0
RotateEntity light2, 40, 0, 0



light1 = CreateLight()
LightColor light1, 0,256,0
RotateEntity light1, 0, 40, 0

light = CreateLight()
LightColor light, 256,0,256
RotateEntity light, 10, 0, 0





While(1)

MoveEntity sphere, 0, -2, 0


   If KeyHit(64) Then wire=1-wire ;gittergrafik
   WireFrame wire

If KeyHit(59) = 1 Then PositionEntity camera, 0, 1, -10 ;first person sicht
If KeyDown(59) = 1 Then RotateEntity camera, 0, 0, 0 ;first person sicht

If KeyHit(60) = 1 Then PositionEntity camera, 0, 40, -50
If KeyDown(60) = 1 Then RotateEntity camera, 30, 0, 0 ;2te sicht


If KeyHit(61) = 1 Then PositionEntity camera, 0, 20, 50
    If KeyDown(61) = 1 Then RotateEntity camera, 180, 0, 180 ; nach hinten guck sicht

If KeyHit(62) = 1 Then PositionEntity camera, 0, 80, 0
    If KeyDown(62) = 1 Then RotateEntity camera, 90, 0, 0 ; oben 2d

;If KeyHit(63) = 1 Then PositionEntity camera, 0, 700, 0
    ;If KeyDown(63) = 1 Then RotateEntity camera, 90, 0, 0 ;


   If KeyDown(32) = 1 Then TurnEntity camera, 0, -3, 0
   If KeyDown(30) = 1 Then TurnEntity camera, 0, 3, 0
   If KeyDown(31) = 1 Then MoveEntity camera, 0, 0, -0.15
   If KeyDown(17) = 1 Then MoveEntity camera, 0, 0, 0.15



;If KeyHit(57) = 1 Then PositionEntity sphere,50,500, 2

If KeyDown(29) = 1 Then MoveEntity sphere, 0, 1, 1.065



If KeyDown(57) = 1 Then springen



  If KeyDown(205) = 1 Then TurnEntity sphere, 0, -3, 0
   If KeyDown(203) = 1 Then TurnEntity sphere, 0, 3, 0
   If KeyDown(208) = 1 Then MoveEntity sphere, 0, 0, -2.045
   If KeyDown(200) = 1 Then MoveEntity sphere, 0, 0, 3.065



 




  UpdateWorld()





RenderWorld
Flip
Wend


Wend


End




wie und muss ich da jetzt die netzwerk codes einbinden?

danke schonmal im vorraus

Xeres

Moderator

BeitragSo, Jul 10, 2011 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt keine zwei, drei Befehle, die man mal so eben in den Code packt und einen fertigen Multiplayer Modus bekommt. Such dir Infos / Tutorials zu Möglichkeiten von TCP/UDP und Userlibs in der Richtung.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

adnan3379

BeitragSo, Jul 10, 2011 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
hi Xeres

habe ja das forum durchgeforstet auch so einige tuts durchgestöbert aber irgendwie versteh ich das nicht, hab auch schon SimpleUDP versucht aber auch nicht hinbekommen, deswegen frage ich jetzt hier damit ichs kapiere.

Starwar

BeitragSo, Jul 10, 2011 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Erstmal: Wozu die ganzen Leerzeilen? Kommentieren nicht vergessen Wink
Und: Wenn du erst seit 2 Tagen dabei bist ist das Netzwerk noch etwas früh... Das sieht man daran, dass du deinen "cube" immer wieder überschreibst. Lerne Arrays (Dim) und Types anzuwenden. Ich verstehe deinen Code einfach nicht? Wozu 2 while-Schleifen?
Fürs Netzwerk such mal nach SimpleUDP.
MFG
 

HavockToxx

BeitragMi, Jul 13, 2011 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Adnan(hoffe das war so richtig)

Mal n ernsthafte frage. Wieso glaubst du, das du nach "2 oder 3 Tage" rumbasteln schon ein fertigen Netzwerkprogramm schreiben kannst?. Ich denke, und das musste ich damals auch einsehen, das du weiter erst mal Grundlangenforschung, sprich dein Compiler und deren sprache besser kennen lernen. Ich muste es einsehen und habe in den Letzten 3 Monate viel gelernt. Soviel das ich mich nicht an Netzwerkprogrammierung rantraue. Ich programmiere nun erst mal kleine dinge wie Hilfetools die meine arbeit mir Erleichtern sollen.

MFG
Havock Toxx.

Jolinah

BeitragMi, Jul 13, 2011 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Netzwerk-Programmierung ist leider ein sehr schwieriges Thema, jedenfalls wenn man es "richtig" angehen will. Neben der reinen Netzwerk-Programmierung benötigt man diverse Algorithmen die z.B. Latenzen im Netzwerk/Internet berücksichtigen oder Bewegungen Glätten (Interpolation,Extrapolation) oder neuere Ansätze wie Dead Reckoning. Hilfreich ist auch die so genannte Client Prediction um Eingabe-Verzögerungen zu umgehen usw...

Ich arbeite derzeit seit 2-3 Jahren an einem 3D-Fussball-Spiel (Multiplayer). Trotz jahrelanger Erfahrung im Programmieren musste ich gerade beim Netzwerk-Code grosse Rückschläge hinnehmen und den ganzen Netzwerk-Code etwa 6 mal neu überarbeiten. Mittlerweile ist das Ganze akzeptabel, aber immer noch verbesserungswürdig Wink

Damit will ich aber nicht zu sehr einschüchtern, denn es geht am Anfang auch einfacher, und die ganzen Algorithmen kann man auch erstmal weglassen und bekommt trotzdem schon recht schöne Ergebnisse (halt mit ein paar Rucklern etc.).

Der 1. Schritt wäre zu bestimmen ob du einen Server hast der komplett alle Kugeln verwaltet, oder ob jeder Client seine eigene Kugel verwaltet.

Im 1. Fall müssten sich alle Client-Programme zu einem Server-Programm verbinden und erhalten vom Server immer die aktuellen Kugel-Positionen. Der Server sendet z.B. 10-20 mal pro Sekunde die aktuellsten Positionen aller Kugeln. Immer wenn ein Client dann eine Position vom Server erhält, setzt er die entsprechende Kugel genau an diese Position.

Im 2. Fall übernimmt eines der Client-Programme die Rolle des Servers, aber jeder Client steuert seine eigene Kugel und sendet die eigene Position dem Server. Der Server gibt dann die erhaltenen Positionen einfach weiter an alle anderen Clients. Die Position der eigenen Kugel sendet der Server auch einfach an alle anderen Clients. Das ganze geschieht wieder 10-20 mal pro Sekunde. Wenn ein Client eine Position einer Kugel erhält setzt er die entsprechende Kugel an die empfangene Position.

Neben diesen beiden Varianten gibt es auch noch andere, aber ich denke das sind die gängigsten.

Für das Senden und Empfangen wird dann entweder TCP oder UDP benötigt. Für (Action-)Spiele ist generell UDP zu empfehlen. Aber UDP kann am Anfang auch schwieriger zu handhaben sein (da Pakete nicht, oder nicht in der richtigen Reihenfolge ankommen können. Mit Hilfe einer UDP-Library kann man diese Probleme aber meist umgehen). Das Senden und Empfangen selbst, sollte eigentlich recht einfach zu verstehen sein, wenn du dir die Dokumentation dazu anschaust.

Die Schwierigkeit an der Netzwerk-Programmierung ist ironischerweise meist nicht die Netzwerk-Programmierung ansich, sondern die Logik wie man die PCs/Programme untereinander synchronisiert.
 

adnan3379

BeitragMi, Jul 13, 2011 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
hi, danke für die antworten.
habe auch schon gemerkt das es nicht so leicht wird und bin jetzt weiter dabei die grundlagen zu lernen.Ohne die zu können geht es garnicht.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group