Castle zu zweit?
Übersicht

AlexRathBetreff: Castle zu zweit? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi, Leute!
Versuche aus dem 3D Spiel "Castle" ein Multiplayerspiel zu machen. Dachte an eine Verbindung, wo immer die Daten (x,y,z) vom Spieler übertragen werden... Also im lokalem Netzwerk. Das einzige Problem: Wenn ich eine Taste drücke, bewegen sich beide Spieler... ![]() Code: [AUSKLAPPEN] ;The castle demo! Const FPS=30 Const n_trees=100 Global info1$="Die Burg" Global info2$="Kennen sie Frank? Nein?!" Global info3$="Dann lernen sie ihn in diesem Spiel kennen." Global info4$="A und Y zum Laufen, Leertaste zum Springen, Alt-Links zum Feuern" Include "../start.bb" Global shoot=Load3DSound( "sounds\shoot.wav" ) Global boom=Load3DSound( "sounds\boom.wav" ) SoundVolume boom,.5 Type Player Field entity,model Field anim_speed#,player_y#,roll# End Type Type ChaseCam Field entityn,entity,camera,target,heading,sky End Type Type Spark Field alpha#,sprite End Type Type Bullet Field rot#,sprite,time_out End Type Type Hole Field alpha#,sprite End Type Const TYPE_PLAYER=1,TYPE_BULLET=2,TYPE_TARGET=3,TYPE_SCENERY=10,TYPE_TERRAIN=11 Collisions TYPE_PLAYER,TYPE_TERRAIN,2,3 Collisions TYPE_PLAYER,TYPE_SCENERY,2,2 Collisions TYPE_BULLET,TYPE_TERRAIN,2,1 Collisions TYPE_BULLET,TYPE_SCENERY,2,1 Collisions TYPE_TARGET,TYPE_TERRAIN,2,2 Collisions TYPE_TARGET,TYPE_SCENERY,2,2 Global light,castle,land,ground,water,sky Global spark_sprite,bull_sprite,player_model,hole_sprite,tree_sprite, player2model Global water_level=-2,bull_x#=1.5 Setup() ChangeDir "environ" LoadEnviron( "terrain-1.jpg","water-2_mip.bmp","sky","heightmap_256.bmp" ) ChangeDir "..\" player1.Player=CreatePlayer( 0,10,0 ) player2.Player=CreatePlayer2( 10,10,0 ) camera1.ChaseCam=CreateChaseCam( player1\entity ) period=1000/FPS time=MilliSecs()-period listener=CreateListener( player1\entity,.1,1,.2 ) While Not KeyHit(1) If KeyHit(17) wire=Not wire Wireframe wire EndIf Repeat elapsed=MilliSecs()-time Until elapsed ;how many 'frames' have elapsed ticks=elapsed/period ;fractional remainder tween#=Float(elapsed Mod period)/Float(period) For k=1 To ticks time=time+period If k=ticks Then CaptureWorld UpdateGame() UpdateWorld PositionEntity water,Sin(time*.01)*10,water_level+Sin(time*.05)*.5,Cos(time*.02)*10 For c.ChaseCam=Each ChaseCam UpdateChaseCam( c ) PositionEntity sky,EntityX(c\camera),EntityY(c\camera),EntityZ(c\camera) Next Next RenderWorld tween Flip Wend End Function UpdateGame() For h.Hole=Each Hole UpdateHole( h ) Next For b.Bullet=Each Bullet UpdateBullet( b ) Next For s.Spark=Each Spark UpdateSpark( s ) Next For p.Player=Each Player UpdatePlayer( p ) Next End Function Function UpdateHole( h.Hole ) h\alpha=h\alpha-.005 If h\alpha>0 EntityAlpha h\sprite,h\alpha Else FreeEntity h\sprite Delete h EndIf End Function Function Createplayer.Player( x#,y#,z# ) p.player=New Player p\entity=CreatePivot() p\model=CopyEntity( player_model,p\entity ) p\player_y=y PositionEntity p\entity,x,y,z EntityType p\entity,TYPE_PLAYER EntityRadius p\entity,1.5 ResetEntity p\entity Return p End Function Function Createplayer2.Player( x#,y#,z# ) n.player=New Player n\entity=CreatePivot() n\model=CopyEntity( player2model,n\entity ) n\player_y=y PositionEntity n\entity,x,y,z EntityType n\entity,TYPE_PLAYER EntityRadius n\entity,1.5 ResetEntity n\entity Return n End Function Function CreateBullet.Bullet( p.Player ) bull_x=-bull_x b.Bullet=New Bullet b\time_out=150 b\sprite=CopyEntity( bull_sprite,p\entity ) TranslateEntity b\sprite,bull_x,1,.25 EntityParent b\sprite,0 EmitSound shoot,b\sprite Return b End Function Function UpdateBullet( b.Bullet ) If CountCollisions( b\sprite ) If EntityCollided( b\sprite,TYPE_TERRAIN ) EmitSound boom,b\sprite ex#=EntityX(b\sprite) ey#=EntityY(b\sprite) ez#=EntityZ(b\sprite) TFormPoint( ex,ey,ez,0,land ) hi#=TerrainHeight( land,TFormedX(),TFormedZ() ) If hi>0 hi=hi-.02:If hi<0 Then hi=0 ModifyTerrain land,TFormedX(),TFormedZ(),hi,True EndIf CreateSpark( b ) FreeEntity b\sprite Delete b Return EndIf If EntityCollided( b\sprite,TYPE_SCENERY ) For k=1 To CountCollisions( b\sprite ) If GetEntityType( CollisionEntity( b\sprite,k ) )=TYPE_SCENERY cx#=CollisionX( b\sprite,k ) cy#=CollisionY( b\sprite,k ) cz#=CollisionZ( b\sprite,k ) nx#=CollisionNX( b\sprite,k ) ny#=CollisionNY( b\sprite,k ) nz#=CollisionNZ( b\sprite,k ) th.Hole=New Hole th\alpha=1 th\sprite=CopyEntity( hole_sprite ) PositionEntity th\sprite,cx,cy,cz AlignToVector th\sprite,-nx,-ny,-nz,3 MoveEntity th\sprite,0,0,-.1 Exit EndIf Next EmitSound boom,b\sprite CreateSpark( b ) FreeEntity b\sprite Delete b Return EndIf EndIf b\time_out=b\time_out-1 If b\time_out=0 FreeEntity b\sprite Delete b Return EndIf b\rot=b\rot+30 RotateSprite b\sprite,b\rot MoveEntity b\sprite,0,0,2 End Function Function CreateSpark.Spark( b.Bullet ) s.Spark=New Spark s\alpha=-90 s\sprite=CopyEntity( spark_sprite,b\sprite ) EntityParent s\sprite,0 Return s End Function Function UpdateSpark( s.Spark ) If s\alpha<270 sz#=Sin(s\alpha)*5+5 ScaleSprite s\sprite,sz,sz RotateSprite s\sprite,Rnd(360) s\alpha=s\alpha+15 Else FreeEntity s\sprite Delete s EndIf End Function Function UpdatePlayer( p.Player ) If KeyHit(56) ;fire? CreateBullet( p ) EndIf If KeyDown(203) ;left/right TurnEntity p\entity,0,6,0 ;turn player left/right Else If KeyDown(205) TurnEntity p\entity,0,-6,0 EndIf If KeyDown(30) ;forward If p\anim_speed<=0 p\anim_speed=1.75 Animate p\model,1,p\anim_speed EndIf MoveEntity p\entity,0,0,1 Else If KeyDown(44) ;back If p\anim_speed>=0 p\anim_speed=-1.75 Animate p\model,1,p\anim_speed EndIf MoveEntity p\entity,0,0,-1 Else If p\anim_speed ;stop animating p\anim_speed=0 Animate p\model,0 EndIf ty#=EntityY(p\entity) y_vel#=(ty-p\player_y) p\player_y=ty If KeyHit(57) ;jump? y_vel=5 ;2.4 Else y_vel=y_vel-.5 ;2 EndIf TranslateEntity p\entity,0,y_vel,0 End Function Function CreateChaseCam.ChaseCam( entity ) c.ChaseCam=New ChaseCam c\entity=entity c\camera=CreateCamera() c\target=CreatePivot( entity ) PositionEntity c\target,0,3,-10 EntityType c\target,TYPE_TARGET c\heading=CreatePivot( entity ) PositionEntity c\heading,0,0,20 c\sky=CopyEntity( sky ) Return c End Function Function UpdateChaseCam( c.ChaseCam ) If KeyDown(200) TranslateEntity c\heading,0,-3,0 Else If KeyDown(208) TranslateEntity c\heading,0,+3,0 EndIf dx#=EntityX(c\target,True)-EntityX(c\camera,True) dy#=EntityY(c\target,True)-EntityY(c\camera,True) dz#=EntityZ(c\target,True)-EntityZ(c\camera,True) TranslateEntity c\camera,dx*.1,dy*.1,dz*.1 PointEntity c\camera,c\heading PositionEntity c\target,0,0,0 PositionEntity c\target,0,3,-10 PositionEntity c\sky,EntityX(c\camera),EntityY(c\camera),EntityZ(c\camera) End Function Function LoadEnviron( land_tex$,water_tex$,sky_tex$,height_map$ ) light=CreateLight() TurnEntity light,45,45,0 land_tex=LoadTexture( land_tex$,1 ) ScaleTexture land_tex,10,10 land=LoadTerrain( height_map$ ) EntityTexture land,land_tex TerrainShading land,True PositionEntity land,-1000,-100,-1000 ScaleEntity land,2000.0/256,100,2000.0/256 EntityType land,TYPE_TERRAIN TerrainDetail land,750,True For k=1 To n_trees Repeat tx#=Rnd(-70,70)-150 tz#=Rnd(-70,70)+400 ty#=TerrainY( land,tx,0,tz ) Until ty>water_level t=CopyEntity( tree_sprite ) PositionEntity t,tx,ty,tz ScaleSprite t,Rand(2,3),Rand(4,6) Next ground=CreatePlane() EntityTexture ground,land_tex PositionEntity ground,0,-100,0 EntityOrder ground,9 water_tex=LoadTexture( water_tex$,3 ) ScaleTexture water_tex,20,20 water=CreatePlane() EntityTexture water,water_tex PositionEntity water,0,water_level,0 sky=LoadSkyBox( sky_tex$ ) EntityOrder sky,10 HideEntity sky End Function Function LoadSkyBox( file$ ) m=CreateMesh() ;front face b=LoadBrush( file$+"_FR.jpg",49 ) s=CreateSurface( m,b ) AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0 AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1 AddTriangle s,0,1,2:AddTriangle s,0,2,3: FreeBrush b ;right face b=LoadBrush( file$+"_LF.jpg",49 ) s=CreateSurface( m,b ) AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0 AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1 AddTriangle s,0,1,2:AddTriangle s,0,2,3 FreeBrush b ;back face b=LoadBrush( file$+"_BK.jpg",49 ) s=CreateSurface( m,b ) AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0 AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1 AddTriangle s,0,1,2:AddTriangle s,0,2,3 FreeBrush b ;left face b=LoadBrush( file$+"_RT.jpg",49 ) s=CreateSurface( m,b ) AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0 AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1 AddTriangle s,0,1,2:AddTriangle s,0,2,3 FreeBrush b ;top face b=LoadBrush( file$+"_UP.jpg",49 ) s=CreateSurface( m,b ) AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0 AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1 AddTriangle s,0,1,2:AddTriangle s,0,2,3 FreeBrush b ;bottom face b=LoadBrush( file$+"_DN.jpg",49 ) s=CreateSurface( m,b ) AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1 AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0 AddTriangle s,0,1,2:AddTriangle s,0,2,3 FreeBrush b ScaleMesh m,100,100,100 FlipMesh m EntityFX m,1 Return m End Function Function Setup() castle=LoadMesh( "castle\castle1.x" ) ScaleEntity castle,.15,.15,.15 EntityType castle,TYPE_SCENERY player_model=LoadAnimMesh( "markio\mariorun.x" ) player2model=LoadAnimMesh( "markio\mariorun.x" ) ScaleEntity player_model,.2,.2,.2 TranslateEntity player_model,0,-1.25,0 HideEntity player_model ScaleEntity player2model,.2,.2,.2 TranslateEntity player2model,0,-1.25,0 HideEntity player2model spark_sprite=LoadSprite( "sprites\bigspark.bmp" ) HideEntity spark_sprite bull_sprite=LoadSprite( "sprites\bluspark.bmp" ) ScaleSprite bull_sprite,3,3 EntityRadius bull_sprite,1.5 EntityType bull_sprite,TYPE_BULLET HideEntity bull_sprite hole_sprite=LoadSprite( "sprites\bullet_hole.bmp",1 ) EntityBlend hole_sprite,2 SpriteViewMode hole_sprite,2 HideEntity hole_sprite tree_sprite=LoadSprite( "sprites\tree.bmp",7 ) HandleSprite tree_sprite,0,-1 ScaleSprite tree_sprite,2,4 PositionEntity tree_sprite,0,0,-100 SpriteViewMode tree_sprite,3 EntityAutoFade tree_sprite,120,150 End Function WAS MACH ICH FALSCH??? |
||
- Zuletzt bearbeitet von AlexRath am Sa, Jul 14, 2007 12:33, insgesamt einmal bearbeitet
![]() |
Puccini |
![]() Antworten mit Zitat ![]() |
---|---|---|
falsch hast du erstmal gemacht das du deinen code falsch gepostet hast!
das schaut sich keiner durch der halbwegs bei verstand ist! strukturier den mal und poste dann in einem Code: [AUSKLAPPEN] codefenster deinen relevanten code!
das mit skybox und der ganze kram rundherrum braucht keiner! poste nur das wo du 1. Daten schickst 2. Daten empfängst 3. Spieler positionierst und die eine oder andere relevante funktion deiner seites noch! |
||
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM www.ragesoft.de Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39 |
AlexRath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Tut mir leid, aber ich bin Anfänger und kenn mich noch nicht so gut aus... | ||
PS: Wer Rechtschreibfehler findet, darf sie behalten! ![]() |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Postest du trotzdem die geforderten Dinge? ![]() Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
AlexRathBetreff: ja... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich weiß ja nicht WAS ich posten muss................ | ||
PS: Wer Rechtschreibfehler findet, darf sie behalten! ![]() |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Puccini hat Folgendes geschrieben: poste nur das wo du
1. Daten schickst 2. Daten empfängst 3. Spieler positionierst das musst du nochmal extra reinschreiben.... |
||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und falls du jetzt meinst, du weißt nicht, wo das im Code zu finden ist, dann wird dir hier bestimmt keiner weiterhelfen sondern dich erstmal auf www.robsite.de verweisen, damit du dort mal robs tutorial machst...
Also wir machen dein spiel sicher nicht, Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
MolchMitDolch |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Irgendwie beschleicht mich der Verdacht, das 2/3 der User hier Bots sind die jeden Beitrag mit "falsche Topic" / "falscher Post" oder "Anfängerfrage" quitieren und im besten Fall noch auf die Forensuche oder Robsite verweisen...
Zugegeben ist es schon heftig ein über 400 Zeilen-Code zu posten von dem der Großteil wirklich nicht relevant ist, aber wayne es war sein erster Tag/Post hier im Board da kann man ja mal ein Auge zudrücken ![]() ![]() Zitat: das schaut sich keiner durch der halbwegs bei verstand ist!
Doch ich, hab grad nix bessres zu tun ![]() Aber die ultimative Lösung hab ich auch nicht, da mir die ganzen externen Dateien fehlen und ich so erstmal den halben Code umschreiben musste um ohne sie auszukommen, mir ist nur aufgefallen das in der "UpdatePlayer()"-Funktion "p/entity" scheinbar für beide Spieler der Bezugspunkt ist, wiso weis ich nicht. Lößungsvorschlag: zeile 56, 57: Code: [AUSKLAPPEN] player1.Player=CreatePlayer( 0,10,0 ) player2.Player=CreatePlayer2( 10,10,0 ) -->Beide "global" machen Zeile 247 und 253 ("UpdatePlayer()"-Funktion >> Tastenabftage für "A" und "Y") Code: [AUSKLAPPEN] 247: MoveEntity p\entity,0,0,1 253: MoveEntity p\entity,0,0,-1 -->"p\entity" durch "player1.Player\entity" ersetzen. Dann ist Player1 von Player2 entkoppelt, vielleicht muss man in der "UpdatePlayer()"-Funktion auch noch andere "p"s durch "player1.Player" ersetzen um z.B. Animationen zu entkoppeln, das konnte ich ohne Objekte nicht ausprobieren. mfg MolchMitDolch ![]() ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group