Bewegung eines ausgewählten Spieler?
Übersicht

RoggiBetreff: Bewegung eines ausgewählten Spieler? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute,
ich habe zurzeit ein Problem. Ich code derzeit an einem sehr kleinen Fußballhallenspiel. Bisher bin ich für die letzten 2 Tage ganz gut voran gekommen. Doch nun tritt ein Problem auf. Ich habe es so gemacht, dass wenn man die Taste D drückt, der ausgewählte Spieler gewechselt wird. Man soll praktisch immer nur den ausgewählten Spieler steuern können. Der Spielerwechsel funktioniert auch gut, und es wird auch immer angezeigt das ein anderer Spieler ausgewählt ist, doch bei der darauffolgenden Bewegung klappt etwas nicht. Und zwar, wenn ich den Spieler wechsel und auf laufen drücke dann fängt einer an einen schritt zu laufen. Nun geht nichts mehr. Wenn ich nun die Nach-Vorn-Taste gedrückt halte und dazu immer d drücke, dann bewegen sich nach und nach alle Spieler mit. Aber nicht das ich nur einen steuer. mit jedem Tastendruck bewegen sich dann alle Spieler. Bitte helft mir bei diesem Problem. Hier der Sourcecode: Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SeedRnd MilliSecs() WireFrame 0 Type Spieler Field X# Field Z# Field Ausgewaehlt Field Mesh Field ID End Type Player=LoadMesh("models\player.3ds") PositionEntity Player,10,0,5 ScaleEntity Player,20,20,20 RotateMesh Player,0,90,0 sprite=LoadImage("anzeige.bmp") camera=CreateCamera(sphere1);den Teil mit einem -- im Kommentar bitte in den kollissionscode einfügen!! RotateEntity camera,20,0,0;-- PositionEntity camera,x#,25,0;-- light = CreateLight (1) RotateEntity light,90,0,0 PositionEntity light,0,10,10 terrain=CreateTerrain(512) tex=LoadTexture("rasen.png") SetBuffer TextureBuffer(tex) ;Color ;0,200,0 ;Rect ;0,0,256,256 EntityTexture terrain,tex x# = 0 y# = 0 z# = 30 sphere1= CreateSphere(32) RotateEntity sphere1,0,-45,0 PositionEntity sphere1,x#,y#,z# EntityType sphere1,1 EntityColor sphere1,255,255,255 cube2=CreateCube() PositionEntity cube2,70,20,90 EntityBox cube2,-70,-20,-10,70*2,20*2,2*2 EntityType cube2,3 ScaleEntity cube2,70,20,2 EntityAlpha cube2,0.75 Collisions 1,2,3,2 Collisions 1,3,3,2 xs# = -.0 ys# = 0 zs# = .1 slow_down_x#=.05 slow_down_y#=.1 slow_down_z#=.05 collision=0 For I = 1 To 4 Spieler.Spieler = New Spieler Spieler\ID= I Spieler\Mesh = CopyEntity (Player) Spieler\Z=Rand(0,40) Spieler\X=Rand(0,70) PositionEntity Spieler\Mesh,Spieler\X,0,Spieler\Z Next SetBuffer BackBuffer() While Not KeyHit(1) xkamera#=x#+kx# PositionEntity camera,xkamera#,25,0 If KeyHit(32) = 1 Then Auswahl = Rand(1,4) For Spieler.Spieler = Each Spieler If Spieler\ID = Auswahl Then Spieler\Ausgewaehlt = True If Spieler\Ausgewaehlt Then If KeyDown(200)=1 Then MoveEntity Spieler\Mesh,xSpieler#,ySpieler#,1 If KeyDown(208)=1 Then MoveEntity Spieler\Mesh,xSpieler#,ySpieler#,-1 If KeyDown(203)=1 Then yaw#=yaw#+1. If KeyDown(205)=1 Then yaw#=yaw#-1. RotateEntity Spieler\Mesh,pitch#,yaw#,roll# EndIf Next EndIf ys# = ys# - .005 If y# < 1 Then y# = 1 ys# = -ys# * .6 - .03 EndIf y# = y# + ys# x# = x# + xs# z# = z# + zs# zs# = zs# * .99 xs# = xs# * .99 If MouseHit(1) Then ys# = .4 xs# = Rnd(.9,.2) zs# = Rnd(1.5,0.5) EndIf If KeyHit(31)Then ys# = .0 xs# = Rnd(.9,.2) zs# = Rnd(1.5,0.5) EndIf PositionEntity sphere1,x#,y#,z# UpdateWorld RenderWorld Collision=EntityCollided(sphere1,3) If collision>0 Then collision = CountCollisions(sphere1) piv = CreatePivot() PositionEntity piv,CollisionX(sphere1,collision),CollisionY(sphere1,collision),CollisionZ(sphere1,collision) AlignToVector piv,CollisionNX(sphere1,collision),CollisionNY(sphere1,collision),CollisionNZ(sphere1,collision),3 TFormVector xs,ys,zs,0,piv TFormVector TFormedX(),TFormedY(),-TFormedZ(),piv,0 xs = TFormedX() ys = TFormedY() zs = TFormedZ() FreeEntity piv EndIf DrawImage sprite,5,5;-- Color 0,0,0;-- Text 45,28,m1+" : "+m2;-- Color 255,255,255 Text 50,50,Auswahl Flip Cls Wend End Bin für jede Hilfe dankbar! MfG Roggi |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du machst das ein bischen umständlich .
Warum machste dir nicht eine Variable wo der aktuelle Spieler drin gemerkt wird . Und das Spieler\Ausgewaehlt = True brauchste dann nicht mehr ! Außerdem setzt du Spieler\Ausgewaehlt nicht auf FALSE !!! |
||
Roggi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja also im Type Spieler habe ich ja "Ausgewaehlt" vermerkt. das ist doch die Variable. Und was du mit False meinst, kann ich leider noch nicht nachvollziehen, bzw. habe ich übersehen. Bin weiterhin für Hilfe Dankbar.
MfG Tom |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Man soll praktisch immer nur den ausgewählten Spieler steuern können
Wenn du alle auswählst laufen auch alle , oder !??? Mit der Variable meine ich anders . global SpielerAkt.Spieler Mit For IrgendeinSpieler.Spieler = Each Spieler kannst du den Spieler suchen if IrgendeinSpieler\ID=xx then SpielerAkt=IrgendeinSpieler :exit Wenn du jetzt bei dem aktuellen Spieler Daten ändern möchtest kannst du direkt auf die Struktur zugreifen . SpielerAkt\Punkte= SpielerAkt\Ausdauer= SpielerAkt\Bla= Die Position hast du eigentlich schon über das Entity , macht aber nix . |
||
Roggi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ahja vielen Dank, erstmal. Ich werde das probieren sobald ich wieder zu Hause bin. Ich melde mich dann.
MfG Tom Edit: Es klappt alles wunderbar, habe es so wie du sagtest probiert, dann funtionierte es, habe dann noch was grundlegendes am Code geändert und nun klappt es auch ohne den Teil von dir ![]() ![]() |
||
Roggi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OK nun klappt alles wie gesagt super, doch nun habe ich ein anderes problem ![]() ![]() ![]() Mit Entitybox habe ich das problem. Oben im Code, habe ich ja um ein einfachen Quader eine Collisionsbox gemacht. und nun will ich einfach zum probieren eine kleine Halle mit Banden ausprobieren, damit der Ball beim proben nicht mehr ins Aus kann. Aber nun komme ich mit Entitybox nicht mehr klar. Warum klappt es einfach nicht? Ich scheine heute wieder mal ein Brett vor dem Kopf zu haben ![]() Code: [AUSKLAPPEN] cube2=LoadMesh("models\halle1.3ds") RotateEntity cube2,0,90,0 PositionEntity cube2,50,0,100 EntityType cube2,3 EntityBox(cube2,50,0,100,4*2,7*2,5*2) ScaleEntity cube2,4,7,5 Collisions 1,2,3,2 Collisions 1,3,3,2 in der schleife: Code: [AUSKLAPPEN] Collision=EntityCollided(sphere1,3) ;Text 0,14,EntityCollided(sphere1,3) If collision>0 Then collision = CountCollisions(sphere1) piv = CreatePivot() PositionEntity piv,CollisionX(sphere1,collision),CollisionY(sphere1,collision),CollisionZ(sphere1,collision) AlignToVector piv,CollisionNX(sphere1,collision),CollisionNY(sphere1,collision),CollisionNZ(sphere1,collision),3 TFormVector xs,ys,zs,0,piv TFormVector TFormedX(),TFormedY(),-TFormedZ(),piv,0 xs = TFormedX() ys = TFormedY() zs = TFormedZ() FreeEntity piv EndIf Wer den Rest des Codes sucht, der ist im ersten Beitrag. Die Datei der Halle ist hier: http://www.Rotation.redio.de/hs/halle1.3ds Danke für jede Hilfe! MfG Tom |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Als Collision solltest du Kugel (Ball) zu Polygon (Halle) benutzen .
Oder willst du den Ball von außen auf die Halle schießen ![]() Collisionen gehen immer vom bewegten Objekt , also dein Ball aus . EntityBox benutzt du außerdem falsch ... die ersten Parameter beziehen sich auf eine Ecke . |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group