CamerPick auf Terrain

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Honesch

Betreff: CamerPick auf Terrain

BeitragDo, Sep 18, 2008 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
hey

Ich möchte meinen Spieler zu dem Punkt bewegen, auf den ich im Terrain klicke...wenn ihr versteht was ich meine. Ich sehe meinen Spieler in der 3rd-person Pespektive. Auf den Punkt soll er dann "hingehen". Es muss auf jeden Fall mit Camerpick funktionieren, denke ich mal. Aber wie genau ?! Der Rückgabewert ist doch nur das handle... und das terrain ist eine größe Fläche, nicht nur ein würfel oder eine Kugel. Und er soll sich genau auf den Punkt auf der großen Fläche hinbewegen. Ich würde mich freuen, wenn ihr mir helfen könnt Smile

mfg Honesch aus Wien Cool
Das Leben ist wie ein Computerspiel. Scheiß Handlung aber geile Grafik !
 

BadDeath

BeitragDo, Sep 18, 2008 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wäre es mit
https://www.blitzforum.de/help/PickedX
https://www.blitzforum.de/help/PickedY
https://www.blitzforum.de/help/PickedZ ?
-~= real coders just code in binary =~-
 

Honesch

BeitragDo, Sep 18, 2008 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja..dann hab ich die absoluten Koordinaten im Raum...aber wie kann ich den Player dann dorthin bewegen ?? Confused
Das Leben ist wie ein Computerspiel. Scheiß Handlung aber geile Grafik !
 

BadDeath

BeitragDo, Sep 18, 2008 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
In dem du ihn auf die Punkte ausrichtest (siehe Hilfe für Befehle wie Turnentity, DeltaYaw) und dann mit z. B. MoveEntity bewegst.
-~= real coders just code in binary =~-

Der_Schläfer

BeitragFr, Sep 19, 2008 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ich persönlich würde jetzt einen Pivot dort plazieren wo er hingehn soll (das empfielt sich besonders wenn du z.B noch einen blinkenden Pfeil als anzeige für den gewählten Punkt machen möchtest)

ist ausserdem konfortabler den spieler nach einer entity auszurichten anstatt mit den absoluten koordinaten zu hantieren
 

Honesch

Betreff: danke :)

BeitragFr, Sep 19, 2008 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die guten antworten...werde es mal ausprobieren Very Happy

mfg Honesch aus Wien Cool
Das Leben ist wie ein Computerspiel. Scheiß Handlung aber geile Grafik !
 

Honesch

Betreff: -.-

BeitragSo, Sep 21, 2008 12:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe schon fast alles ausprobiert...funktioniert aber nicht richtig....er soll den pivot entfernen, wenn der player in der unmittelbaren nähe des pivots ist. Das funktioniert nicht ... wenn ichs per "If keyhit(..) then del_piv(movepivot)" mache, gehts Confused . Meine Bedingung für das Entfernen des Pivot ist: Code: [AUSKLAPPEN]

If ( ( Abs(xPicked-EntityX(player)) <= 30 ) And (Abs(yPicked-EntityY(player)) <= 30 ) ) Then del_piv(movepivot)

xPicked bekomme ich mit einer funktion...sie liefert die absoluten Raumkoordinaten der Maus..also bei mir xPicked, yPicked, zPicked...Wenn ich einen Pivot setzte (per Mausklick) dann wird dieser an der derzeitigen xPicked,0,zPicked positioniert....Dann dreht sich der Player dorthin (Pointentity ; nicht deltayaw etc.) und bewegt sich solange vorwärts, bis die oben genannte Bedingung eintritt, dann sollte der Pivot sich entfernen.
Das hört sich vielleicht komplizierter an, als es ist. Ich gebe euch einmal den Code:
Code: [AUSKLAPPEN]

;Hauptschleife
While Not KeyHit(1)


move_camera()

get_picked_mesh()

If MouseDown(1) Then set_move_piv()
If movepiv_set=1 Then move_player_to_piv()

If ( ( Abs(xPicked-EntityX(player)) <= 30 ) And (Abs(yPicked-EntityY(player)) <= 30 ) ) Then del_piv(movepivot)

If KeyHit(2) Then del_piv(movepivot)


Collisions typ_player,typ_map,2,1


UpdateWorld
RenderWorld

draw_mouse()
show_vars()

Flip 0

Wend

;Functions

Global picked_mesh,xPicked,yPicked,zPicked

Function get_picked_mesh()
   
   picked_mesh=CameraPick(camera,MouseX(),MouseY())
   xPicked=PickedX()
   yPicked=PickedY()
   zPicked=PickedZ()
   
   Return picked_mesh
   Return xPicked
   Return yPicked
   Return zPicked

End Function    

;=====================================================================

Global movepivot
Global movepiv_set=0
Global piv_player_dist

Function set_move_piv()
   
   If movepivot=1
      FreeEntity movepivot
   Else
   
   movepivot=CreatePivot()
   PositionEntity movepivot,xPicked,0,zPicked
   
   piv_player_dist=EntityDistance(player,movepivot)
   movepiv_set=1
   
   EndIf
   
   Return movepivot
   
End Function

;=====================================================================

Global pointed=0
Global player_walkspeed = 3

Function move_player_to_piv()
   
   If pointed = 0
      PointEntity player,movepivot
      pointed = 1
   EndIf
   playerpitch=EntityPitch(player)
   playeryaw=EntityYaw(player)
   playerroll=EntityRoll(player)
   
   RotateEntity player,0,playeryaw,playerroll
   piv_player_dist=EntityDistance(player,movepivot)
 
   MoveEntity player,0,0,player_walkspeed
   
   Return piv_player_dist
   
End Function

;=====================================================================

Function del_piv(piv)

   FreeEntity piv
   
   movepiv_set=0
   pointed=0
   
   Return movepiv_set
   
End Function



Was ich auch nicht verstehe ist, wenn ich mit der Maus in die Nähe der absoluten x-Position des derzeitigen Stands des Players komme, auch die Funktion del_movepivot aufgerufen wird...da wird die ganz oben genannte Bedingung ja nicht erfüllt.. Confused Shocked Question Question Und außerdem wenn ich die Funktion del_movepiv(movepivot) nicht dirkekt aufrufe (siehe oben) kommt die Meldung, dass der Pivot gar nicht existiert ?! Sollte doch keinen Unterschied machen, ob ich sie dirket oder indirekt aufrufe. Ich bin mit meinen Ideen am Ende..habe es auch schon mit EntityDistance versucht, war auch nicht schlecht, aber ist dann sinnlos, wenn man auf ein Gebäude klickt (weiter oben ; höhere yKoord) und dann die Distanz zwischen den beiden gar nicht so klein werden kann, auch wenn der Player direkt unter dem pivot ist. Ich bin am verzweifeln. Ich hoffe ihr habt verstanden, was mein Anliegen ist, wenn nicht dann gebt mir bescheid. Danke im vorraus ! Sad

mfg Honesch [/code]


EDIT: Habe es gelöst..
1. Hatte ich die Bedingung falsch (hatte y statt z Embarassed )
2. Hatte ich nur die derzeitigen xPicked und zPicked drinnen..und nicht die tatsächliche position des pivots
position


mfg Honesch aus Wien Cool
Das Leben ist wie ein Computerspiel. Scheiß Handlung aber geile Grafik !
  • Zuletzt bearbeitet von Honesch am So, Sep 21, 2008 12:26, insgesamt einmal bearbeitet

The_Nici

BeitragSo, Sep 21, 2008 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würd ja eh EntityDistance nehmen, praktischer.

Btw rück deinen code mit Tabulatoren ein, ist fast nicht zu lesen. Eingerückte Codes sind viel besser zu lesen.
Code: [AUSKLAPPEN]

While IchRueckeEin = True
   Print "Super!"
Wend

Code: [AUSKLAPPEN]

If KeyHit(1337) Then
   Print "Du bist so 1337, du hast sogar ne 1337ner Taste auf deiner Tastatur! :o"
EndIf


Das ganze auch in For...Next Schleifen, Repeat schleifen etc.

HF
 

BadDeath

BeitragSo, Sep 21, 2008 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wäre es mit einer "richtigen" Abstands-Funktion? Entweder nimmst du die von Blitz (EntityDistance) oder nimmst sowas hier, wobei die nur die X- und Z-Achsen berücksichtigt.

Code: [AUSKLAPPEN]
Function Distance#(start,aim)
   DisX#=(EntityX(aim)-EntityX(Start,1))
   DisZ#=(EntityZ(aim)-EntityZ(Start,1))
   Dist#=Sqr(DisX#^2+DisZ#^2)
   Return Dist#
End Function


Dann noch zu deiner Funktion get_picked_mesh(). Es geht nur ein Return, weil sobald das erste Return abgeschlossen wurde, die Funktion verlassen wird, meines Wissens.
-~= real coders just code in binary =~-
 

Honesch

BeitragSo, Sep 21, 2008 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
@ BadDeath
Habe jetzt eine richtige Abstandsfunktion...und wegen der get_picked_mesh() funktion..dachte auch dass nur ein return geht...aber ich kann alle Werte (x,-y,-z-Picked) extern anzeigen lassen...also müssen alle zurückgegeben sein denke ich mal.. Smile

@The_Nici
Habe das Problem jetzt doch gelöst..und normalerweise verwende ich überall Tabulatoren Wink aber trotzdem danke ! Very Happy


mfg Honesch aus Wien Cool @ very happy
Das Leben ist wie ein Computerspiel. Scheiß Handlung aber geile Grafik !

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group