Schüsse im 3D-Game
Übersicht

MerierBetreff: Schüsse im 3D-Game |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich bins mal wieda ![]() Ich habe schonmal ein kleines 3d Spiel programmiert worinn man auch schießen kann.Das klappt auch alles ganz gut.So nun habe ich die Frage:" Wie kann ich es machen das wenn ich schieße das mein Freund das bei sich sieht? und andersrum ?" Ich hoffe ihr könnt helfen ![]() Hier ist der jetzige Code: Code: [AUSKLAPPEN] ;Copright (C) 2008 by Merier Graphics3D 1024,768,0,2 SetBuffer BackBuffer() Global LastPing, PingTime, Modus, Stream, ServerIP, MeineID Global Counter = 0 Global ServerPort = 56000 Const NewPlayer = 1 Const NewPlayer2 = 2 Const MovePlayer = 3 Const Msg = 4 Const Ping = 5 Const PingAnswer = 6 Const AskForID = 7 Const IDAnswer = 8 Type Player Field IP, Port Field Mesh Field Bull Field ID Field x#, y#, z#, yaw End Type Type Bull Field Shot End Type Global s.Bull While Not KeyHit(211) main() Wend Function main() n = CountHostIPs("") MeineIP = HostIP(1) Modus = Input("0 = Server | 1 = Client : ") If Modus Then ;ServerIP=INT_IP(Input("IP des Anderen? ")) ;If ServerIP < 10 Then ServerIP = INT_IP("127.0.0.1") ServerIP = INT_IP("127.0.0.1") Stream=CreateUDPStream() WriteByte Stream, NewPlayer2 SendUDPMsg Stream, ServerIP, ServerPort AppTitle "Client" DebugLog "Client" Else Stream=CreateUDPStream(ServerPort) AppTitle "Server" DebugLog "Server" End If Timer = CreateTimer(60) LastPing = MilliSecs() Local PlayerLocal.Player = New Player PlayerLocal\x# = 0 PlayerLocal\x# = 1 PlayerLocal\z# = 10 PlayerLocal\mesh=CreateCube() ScaleEntity PlayerLocal\mesh,3,3,3 PositionEntity PlayerLocal\mesh,1600,110,1200 EntityColor PlayerLocal\mesh,0,0,55 EntityRadius PlayerLocal\mesh,1.3 EntityType PlayerLocal\mesh,4 Lives = LoadImage("gfx\Lives.bmp") ;Cube = CreateCube() ;PositionEntity Cube,1600,110,1200 ;EntityType Cube,3 ;ScaleEntity Cube,3,3,3 ;EntityRadius Cube,1.2 ;Sky = CreateCube() ;ScaleEntity Sky,50000,10000,50000 ;SkyT = LoadTexture("gfx\Sterne.jpg") ;EntityTexture Sky,SkyT Terrain = LoadTerrain("gfx\hmap.bmp") ScaleEntity Terrain,20,180,20 EntityType Terrain,2 TextTerr = LoadTexture("gfx\TerrT.jpg") EntityTexture Terrain,TextTerr Cam = CreateCamera(PlayerLocal\mesh) PositionEntity Cam,0,30,-30 EntityType Cam,1 EntityRadius Cam,4 TurnEntity Cam,30,0,0 CameraClsColor Cam, 0, 0, 50 CameraFogColor Cam,120,200,210 CameraFogRange Cam,1,10 water=CreatePlane() Mirror = CreateMirror() watertext=LoadTexture ("gfx\Wasser.bmp",5) EntityTexture water,watertext ScaleTexture watertext,100,200 MoveEntity water,0,50,0 EntityAlpha water,0.6 While Not KeyHit(211) Cls Zahl = Zahl + 1 If Zahl = 5 Then Zahl = 1 DrawImage Lives,20,20 MoveEntity PlayerLocal\mesh,0,-0.5,0 ;RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0 ;MoveMouse 512,384 ;MoveEntity Cam,0,0,2 Collisions 1,2,2,2 Collisions 3,2,2,2 Collisions 4,2,2,2 Collisions 5,2,2,2 ;If KeyDown(208) Then MoveEntity Cube,0,0,-1 ;If KeyDown(200) Then MoveEntity Cube,0,0,1 ;If KeyDown(203) Then TurnEntity Cube,0,2,0 ;If KeyDown(205) Then TurnEntity Cube,0,-2,0 ;If KeyDown(17) Then MoveEntity Cube,0,0,2 ;If KeyDown(31) Then MoveEntity Cube,0,0,-2 If KeyHit(1) Then End For s.Bull = Each Bull MoveEntity s\Shot, 0, 0, 5 Next If MouseHit(1) s = New Bull s\Shot = CreateCube() PositionEntity s\Shot, EntityX(PlayerLocal\mesh),EntityY(PlayerLocal\mesh),EntityZ(PlayerLocal\mesh) TurnEntity s\Shot,EntityPitch(PlayerLocal\mesh),EntityYaw(PlayerLocal\mesh),EntityRoll(PlayerLocal\mesh) EntityType s\Shot,5 EntityRadius s\Shot,0.5 EndIf UpdateWorld RenderWorld If True Then Pos# = PlayerLocal\x# + PlayerLocal\z# + PlayerLocal\Yaw If KeyDown(200)=True Then MoveEntity PlayerLocal\mesh,0,0,1 If KeyDown(208)=True Then MoveEntity PlayerLocal\mesh,0,0,-1 If KeyDown(205)=True Then TurnEntity PlayerLocal\mesh,0,-3,0 If KeyDown(203)=True Then TurnEntity PlayerLocal\mesh,0,3,0 PlayerLocal\x# = EntityX#(PlayerLocal\Mesh) PlayerLocal\y# = EntityY#(PlayerLocal\Mesh) PlayerLocal\z# = EntityZ#(PlayerLocal\Mesh) PlayerLocal\Yaw = EntityYaw(PlayerLocal\Mesh) Pos2# = PlayerLocal\x# + PlayerLocal\z# + PlayerLocal\Yaw Ping() recv=RecvUDPMsg(Stream) While(recv<>0) While(ReadAvail(Stream)>0) In = 0 In = ReadByte(Stream) InIP = UDPMsgIP(Stream) InPort = UDPMsgPort(stream) Select In Case NewPlayer ;################################# P.Player = New Player P\ID = ReadInt(Stream) P\IP = InIp P\Mesh = CreateCube() P\Bull = CreateCube() EntityColor P\Mesh, 255,0,0 ScaleEntity P\Mesh,3 ,3 ,3 Case NewPlayer2 ;################################# Counter = Counter + 1 P.Player = New Player P\ID = Counter ;ReadInt(Stream) P\IP = InIp P\Port = InPort P\Mesh = CreateCube() P\Bull = CreateCube() EntityColor P\Mesh, 255,0,0 ScaleEntity P\Mesh, 3, 3, 3 WriteByte Stream, IDAnswer WriteInt Stream, Counter SendUDPMsg Stream, InIP, InPort For P.Player = Each Player If p <> playerlocal And p\id <> counter WriteByte Stream, NewPlayer WriteInt Stream, Counter SendUDPMsg Stream, P\Ip, P\Port EndIf Next ; Dem neuen Spieler alle bestehenden übergeben For P.Player = Each Player If p\id <> counter WriteByte Stream, NewPlayer WriteInt Stream, P\ID SendUDPMsg Stream, InIp, InPort EndIf Next Case MovePlayer ;################################# X# = ReadFloat(Stream) Y# = ReadFloat(Stream) Z# = ReadFloat(Stream) Turn = ReadInt(Stream) AktuelleID = ReadInt(Stream) If Modus = 0 Then For P.Player = Each Player If AktuelleID <> P\ID And p<>playerlocal Then WriteByte Stream, MovePlayer WriteFloat Stream, X# WriteFloat Stream, Y# WriteFloat Stream, Z# WriteInt Stream, Turn WriteInt Stream, AktuelleID SendUDPMsg Stream, P\IP, P\Port End If If AktuelleID = P\ID Then P\x# = x# P\y# = y# P\z# = z# P\yaw = turn Exit End If Next Else For P.Player = Each Player If P\ID = AktuelleID Then P\x# = x# P\y# = y# P\z# = z# P\yaw = turn Exit End If Next End If Case Msg ;################################# Text 0,20, "Incoming: "+ReadInt(Stream) Case Ping ;################################# WriteByte Stream, PingAnswer SendUDPMsg Stream, InIP, InPort Case PingAnswer ;################################# PingTime = MilliSecs() - PingTime ;Case AskForID ;################################# ; WriteByte stream, IDAnswer ; WriteByte stream, GetID(InIP) ; SendUDPMsg stream, InIP, 6001-modus Case IDAnswer ;################################# MeineID = ReadInt(Stream) playerlocal\id = meineID End Select Wend recv=RecvUDPMsg(Stream) Wend If Pos# <> Pos2# Then If Modus = 1 Then WriteByte Stream, MovePlayer WriteFloat Stream, PlayerLocal\x# WriteFloat Stream, PlayerLocal\y# WriteFloat Stream, PlayerLocal\z# WriteInt Stream, PlayerLocal\yaw WriteInt Stream, MeineID SendUDPMsg Stream, ServerIP, ServerPort Else For P.Player = Each Player If p<>playerlocal WriteByte Stream, MovePlayer WriteFloat Stream, PlayerLocal\x# WriteFloat Stream, PlayerLocal\y# WriteFloat Stream, PlayerLocal\z# WriteInt Stream, PlayerLocal\yaw WriteInt Stream, meineID SendUDPMsg Stream, P\IP, P\Port EndIf Next End If End If EndIf Text 0,100, EntityX(PlayerLocal\mesh); + " " + PlayerLocal\x# Text 0,130, EntityZ(PlayerLocal\mesh); + " " + PlayerLocal\z# Text 0,160, EntityYaw(PlayerLocal\mesh); + " " + PlayerLocal\Yaw For p.player = Each Player PositionEntity P\Mesh, P\X#, P\Y#, P\Z# RotateEntity P\Mesh, 0, P\Yaw, 0 Next If Modus = 0 Then Text 0,250, "Spieler: " + Counter If Modus Then Text 0,200, "Meine ID: " + MeineID If Modus Then Text 0,5, "Ping: " + PingTime WaitTimer Timer Flip 0 Wend CloseUDPStream Stream FreeEntity Terrain FreeEntity PlayerLocal\mesh FreeImage watertext FreeImage TextTerr FreeImage Lives FreeImage Terrain FreeEntity water FreeEntity Mirror End Function Function GetID(IP) For p.Player = Each Player If P\IP = IP Then Return P\ID Next End Function Function Ping() If (LastPing - MilliSecs() ) > 30000 And Modus > 0 Then RuntimeError "Zeitüberschreitung!" If Modus And (MilliSecs() - LastPing > 999) Then WriteByte Stream, Ping SendUDPMsg(Stream,ServerIP,ServerPort) PingTime = MilliSecs() LastPing = PingTime End If End Function Function INT_IP(ip$) p1=Instr(ip$,".") p2=Instr(ip$,".",p1+1) p3=Instr(ip$,".",p2+1) Return (Int(Mid(ip$,1,p1))*16777216)+(Int(Mid(ip$,p1+1,p2-p1))*65536)+(Int(Mid(ip$,p2+1,p3-p2))*256)+Int(Mid(ip$,p3+1,-1)) End Function |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code kommt mir irgentwie bekannt vor... Egal. Du hast einen Type für deine Schüsse. Jetzt muss bei jedem Schuss die Position, der Winkel und die Geschwindigkeit des Schusses zum Mitspieler übertragen werden. | ||
Merier |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok. Danke! könntest du oder jemand anders vllt diese Sachen mit einbauen in meinen Code?
Währe euch sehr dankbar weil ich es nicht hinbekomme ![]() |
||
![]() |
peacemaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann lass es und mach was anderes. Es wird dir kaum einer etwas in deinem Code schreiben, weil du, der Ersteller, es nicht hinkriegst.
mfG |
||
~Tehadon~
www.tehadon.de http://www.blitzforum.de/worklogs/14/ |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Merier weisst du überhaupt was der Code macht?
MfG |
||
Merier |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja kla weiß ich das! Der Code verschickt die Coordinaten der Spieler an die anderen Clienten weiter und diese erstellen jeweils an diesen Coordinaten die Mesh etc.. | ||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso fragst du den das, is ja genau das gleiche mit den Schüssen ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Merier |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schon aber ich weiß net genau wie das geht weil man mehrere Coordinaten abschicken muss und dann müssen die Schüsse auch noch vor dem gegnerischen Spieler positioniert werden und dann auch noch ind die richtige Richtung gedreht und bewegt werden und ich weiß net genau wie das geht. | ||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Beispiel aus der Hilfe, so kannst du die Schüsse "verwalten"
erstell einfach ne entity mit dem schuss und beweg die mit moveentity im richtigen winkel in die richtige Richtung in dem du X,Y,Z benützt Den richtigen Winkel kann man mit den Trigeometrischen Befehel ausrechnen, also cos sin usw ![]() Must noch ein wenig umschreiben ![]() Code: [AUSKLAPPEN] Type crafts
Field x Field y Field dead Field graphic End Type For t = 1 To 5 alien.crafts = New crafts alien\x = Rnd (0,640) alien\y = Rnd (0,480) alien\dead = 0 alien\graphic = 1 Next For alien.crafts = Each crafts Print alien\x Print alien\y Print alien\dead Print alien\graphic Print "-----------" Next WaitKey |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Merier |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für das Beispiel ich werds mal ausprobieren^^ ![]() ![]() |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich mach das immer so das ich eine Variable für jeden Spieler habe, shoot, die wie die eigenen Koordinaten immer an die anderen mit versendet werden. Wird jetzt geschossen (ein schuss erstellt) wird die eignen Variable auf 1 gesetzt, und beim nächsten senden versendet und wider auf 0 gesetzt. Wenn jetzt ein Spieler von einem anderen den Shoot wert 1 erhält, erstellt dieser einfach einen neuen Schuss-Type an der aktuellen Position / Winkel der Spielers... Fertig ![]() Also wenn du den code WIRKLICH verstehst (also nicht nur weißt was er macht sondern auch weiß wie er funktioniert) dann müsste das kein porblem sien ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mal im ernst, ich find es gerade zu dreist hier mit dem Code eines anderen anzukommen (siehe dazu https://www.blitzforum.de/foru...hp?t=28275 ), frechweg sein eigenes CopyRight drüber zu setzen und dann alle anderen zu bitten einen Code den man selbst nicht verstanden hat um das gewünschte zu ergänzen.
Daher kann ich nur allen hier empfehlen hier NICHT weiterzuhelfen, wer mit fremden Fürzen stinkt sollte ja auch die Zutaten des Menus davor blind beherrschen. Ach ja, Merier, sollte ich Dich bei einem weiteren Verstoß dieser Richtung erwischen werde ich dir eine Verwarnung zukommen lassen. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Daher kam mir der Code so bekannt vor... | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group