3D-Schuss mit Probs (Koordinaten...)
Übersicht

![]() |
DATISBetreff: 3D-Schuss mit Probs (Koordinaten...) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Blitzer.
Code: [AUSKLAPPEN] Graphics3D 800,600,16,2
SetBuffer BackBuffer() cam=CreateCamera() Type shot ;erstellt den Type "shot" Field shot_x ;x Koordinate Field shot_y ;y Koordinate Field shot_z ;z Koordinate End Type Global boby=CreateCylinder(60) Global shot_counter=0 TurnEntity boby,90,0,0 ScaleEntity boby,0.05,1,0.05 brush=CreateBrush(0,255,0) PaintMesh boby,brush EntityFX boby,1 PositionEntity cam,2,0,-1.5 TurnEntity cam,0,35,0 While Not KeyHit(1) ;Hauptschleife UpdateWorld RenderWorld createlaser() Flip Wend End Function createlaser() If KeyDown(57) Then shot_counter = shot_counter +1 End If If shot_counter = 5 Then info.shot = New shot ;hier wird der schuss erstellt info\shot_x = 0 ;da er ja beim Spieler erstellt werden soll : wird die Schusskoordinate(shot_X) auf hero_x und +5 rüber gelegt info\shot_y = 0 ;beim Y wert ist es nicht anders, da der Hero ja auch rauf und runter fahren kann info\shot_z = 0 shot_counter = 0 ;den Zähler auf 0 damit es wieder von vorne losgehen kann End If ;so nachdem der Schuss/laser erstellt wurde, müssen wir ja sagen das JEDER schuss sich nach oben bewegen soll For info.shot = Each shot ;so wird jeder einzelne Schuss angesprochen info\shot_z = info\shot_z +1 PositionEntity boby,info\shot_x,info\shot_y,info\shot_z Next End Function Das ist mein Code und das ist mein Problem: [problem]Wenn man Leertaste drückt, wird der Zylinder in die Weite verschossen. Wenn man die Leertaste ein zweites Mal drückt, ist sie sofort wieder vorne und fliegt nach hinten.[/problem] Folgende Ursache: [reason]PositionEntity boby,... versetzt den Zyllinder ja nur. Das ist mir klar.[/reason] Aber folgende Frage: [question]Wie kann ich den Zyllinder mehrere Male in die Ferne schießen? Was passiert, wenn der Zyllinder immer weiterfliegt, wird dann die Rechengeschwindigkeit verlangsamt?[/question] Danke im Vorraus für die Hilfe |
||
Frauen und Technik?
Männer und BHs? Beides möglich. |
- Zuletzt bearbeitet von DATIS am Do, Nov 01, 2007 20:29, insgesamt einmal bearbeitet
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin. Ich weiss nicht genau, aber ich würde die Schüsse in einem Array speichern. Also:
Code: [AUSKLAPPEN] Graphics3D 800,600,0,1 SetBuffer(BackBuffer) Type shot ;Type Field x Field y Field z Field mesh End Type Dim shnr.shot(99) ;Array mit dem Schusstype ;Alle Arrays mit leeren Shot-Einträgen fülllen. For i=0 To 99 ; von null zu 99 (100) shot(i)=New shot shot(i)\mesh=CreateCylinder(3) HideEntity shot(i)\mesh Next sid=0 While Not KeyHit(1) If KeyHit(57) ;Schuss erstellen shot(sid)=New shot shot(sid)\x=EntityX(player) shot(sid)\y=EntityY(player) shot(sid)\z=EntityZ(player) shot(sid)\mesh=CreateCylinder(3) ; 3 Segments genügen, alles andere ist tödlich RotateEntity shot(sid), EntityPitch(player), EntityYaw(player), EntityRoll(player) sid=sid+1 EndIf For i=0 To 99 ;Schuss updaten MoveEntity shot(i)\mesh, 0,0,5 Next ;etc. RenderWorld Flip Cls Wend MfG |
||
![]() |
DATIS |
![]() Antworten mit Zitat ![]() |
---|---|---|
ha... 60 segmente... sorry, den habe ich einfach aus einem anderen quelltext von mir kopiert (mit brush etc.). habe ich wohl übersehen.
*tod* danke für die schnelle hilfe [edit] hm, ja, im nachhinein habe ich irgendwie probleme mit dem code. bei mir funktioniert er nicht. [/edit] |
||
Frauen und Technik?
Männer und BHs? Beides möglich. |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
hab nie gesagt dass man den einfach pasten kann. -_-
Dazu hab ich nen Fehler, es müsste "sid=(sid+1) MOD 99" heissen. |
||
![]() |
DATIS |
![]() Antworten mit Zitat ![]() |
---|---|---|
sorry, aber ich komme mit der hilfestellung nicht klar. wie muss ich dass den jetzt verändern?
[edit] hm, okay, jetzt habe ich das problem doch noch gelöst: Code: [AUSKLAPPEN] Type shot ;erstellt den Type "shot"
Field shot_x ;x Koordinate Field shot_y ;y Koordinate Field shot_z ;z Koordinate Field mesh ;Mesh "Pfeil" zeichnen End Type Global boby=CreateCylinder(3) Global shot_counter=0 TurnEntity boby,90,0,0 ScaleEntity boby,0.05,1,0.05 brush=CreateBrush(0,255,0) PaintMesh boby,brush EntityFX boby,1 HideEntity boby Das ist das Feld und hier die umgeschriebene Funktion: Code: [AUSKLAPPEN] Function createlaser()
If KeyDown(57) Then shot_counter = shot_counter +1 End If If shot_counter = 12 Then boby2=CopyEntity(boby) info.shot = New shot ;hier wird der schuss erstellt info\shot_x = 0 ;da er ja beim Spieler erstellt werden soll : wird die Schusskoordinate(shot_X) auf hero_x und +5 rüber gelegt info\shot_y = 0 ;beim Y wert ist es nicht anders, da der Hero ja auch rauf und runter fahren kann info\shot_z = 0 info\mesh = boby2 shot_counter = 0 ;den Zähler auf 0 damit es wieder von vorne losgehen kann End If ;so nachdem der Schuss/laser erstellt wurde, müssen wir ja sagen das JEDER schuss sich nach oben bewegen soll For info.shot = Each shot ;so wird jeder einzelne Schuss angesprochen info\shot_z = info\shot_z +1 PositionEntity info\mesh,info\shot_x,info\shot_y,info\shot_z ;PositionEntity boby,info\shot_x,info\shot_y,info\shot_z Next Danke für deine Hilfe, The_Nici. ------------------------------------------------------------- 2. edit Jaja, da steckt bei mir der Wurm drin. Jetzt habe ich den Code in mein "Spiel" eingebaut und er läuft falsch. Der Laser"pfeil" wird nur an der Z-Achse verschossen. Und er dreht sich...?!? We kann ich den einfach nur geradeaus schießen lassen? Code: [AUSKLAPPEN] ;3D-Shoot -> ein mini(!)shooter
Graphics3D 1024,768,32,1 SetBuffer BackBuffer() ;--Maus verstecken, falls Fenstermodus-- HidePointer ;--Zufallszahlen als MilliSecs() zerstreuen-- SeedRnd MilliSecs() ;--Variablen (Bilder laden, Zahlen,... etc.)-- Global player$=Input$("Spielername: ") ; Spielername eingeben Global munition=20 ; Munition der Waffe Global camera=CreateCamera() ; Kamera erstellen Global light=CreateLight(2) ; Licht erstellen Global dna=LoadMesh("dna.3ds") ; DNA laden Global timer=CreateTimer(60) ; Timer mit 60-Fequenz erstellen Global x# ; x-Koordinate (Float) Global y# ; y-Koordinate (Float) Global hotpoint=LoadImage("hotpoint.bmp") ; Zielpunkt Global balken1=LoadSprite("leiste.png",2,camera) ; Leiste (Spielername & Munition) Global kreuz=LoadSprite("fadenkreuz.png",2,camera) ; Fadenkreuz laden (als Sprite, wegen AA & Transparenz) Global zeit=MilliSecs() ; Zeitpunkt, wird für fadenkreuzdrehung benutzt Global p% ; Drehung des Fadenkreuzes (Integer) Global record=Int(Rnd#(1000,10000)) ; Zufallszeitspanne Global level=LoadMesh("tube.b3d") ; Level laden und zeichnen Global angle ; Winkel der Kreuzrotation Global wert ; Wert für Kreuzrotation Global boby=CreateCylinder(3) ; Laser-"Pfeil" erstellen Global shot_counter=0 ; Schusszähler auf 0 Global brush=CreateBrush(0,255,0) ; Brush für boby erstellen ;--Einstellungen für Objekte etc.-- CameraFogMode camera,1 ; KameraNebel einstellen NameEntity dna,"DNA" ; dna "DNA" benennen EntityPickMode dna,2 ; Polygon PositionEntity dna,0,0,2 ; DNA verschieben EntityFX dna,1 ; zum Leuchten bringen MidHandle hotpoint ; hotpoint zentrieren PositionEntity balken1,-2.9,-2.7,4 ; balken positionieren EntityOrder balken1,-1 ; Anordnung negativ ;--AUSNAHME-- Global balken2=CopyEntity(balken1,camera) ; 2. Leiste laden ;--GLOBAL-- PositionEntity balken2,-2.9,-2.35,4 ; 2. Leiste positionieren PositionEntity kreuz,0,0,10 ; Kreuz positionieren EntityOrder kreuz,-1 ; negative Anordnung MoveMouse 1024/2,768/2 ; Maus zum Mittelpunkt verschieben ScaleEntity level,2,2,2 ; Level dimensionieren PositionEntity level,0,2,1 ; Level positionieren TurnEntity boby,90,0,0 ; boby drehen ScaleEntity boby,0.05,1,0.05 ; boby skalieren PaintMesh boby,brush ; boby anmalen EntityFX boby,1 ; boby leuchten lassen HideEntity boby ; boby verstecken ;--Feld für Schüsse erstellen-- Type shot ;erstellt den Type "shot" Field shot_x ;x Koordinate Field shot_y ;y Koordinate Field shot_z ;z Koordinate Field mesh ;Mesh "Pfeil" zeichnen Field pitch ;Pitch des Spielers Field yaw ;Yaw des Spielers End Type ;//Shootercode While Not KeyHit(1) UpdateWorld RenderWorld TurnEntity dna,0,1,0 move() ;//2D- und Rechenkommandos rotate() If MouseHit(1) Then shot() visier=CameraPick(camera,1024/2,768/2) ;//info-objekte & ziele If visier<>0 Then info(Lower$(EntityName$(visier))) EndIf If MouseHit(1) Then shot() Color 0,0,0 Text 20,723,player$ shoot_aktu() DrawImage hotpoint,1024/2,768/2 MoveMouse 1024/2,768/2 Flip 0 WaitTimer timer Wend End ;--Funktionen laden-- Include "Functions.bb" Und die Functions.bb: Code: [AUSKLAPPEN] ;--Schussfunktion--
Function shot() If munition>0 Then munition=munition-1 boby2=CopyEntity(boby) info.shot = New shot info\shot_x = EntityX(camera) info\shot_y = EntityY(camera) info\shot_z = EntityZ(camera) info\mesh = boby2 info\pitch = EntityPitch(camera) info\yaw = EntityYaw(camera) End If End Function ;--Schussaktualisierung-- Function shoot_aktu() For info.shot = Each shot info\shot_z = info\shot_z +1 TurnEntity info\mesh,info\pitch,info\yaw,0 PositionEntity info\mesh,info\shot_x,info\shot_y,info\shot_z Next End Function ;--Informationsfunktion-- Function info(thing$) Select thing Case "dna" Text 10,120,"DNA-Spule" Default Text 10,120,"Unbekanntes Objekt" End Select End Function ;--Fadenkreuzrotierungsfunktion-- Function rotate() If MilliSecs()-zeit>record Then zeit=MilliSecs() Select p Case 0 wert=Floor#(Rnd#(0,3)) If wert=3 Then wert=2 If wert=2 Then p=-1 If wert=1 Then p=1 Case 1 wert=Floor#(Rnd#(0,3)) If wert=3 Then wert=2 If wert=2 Then p=-1 If wert=1 Then p=0 Case -1 wert=Floor#(Rnd#(0,3)) If wert=3 Then wert=2 If wert=2 Then p=0 If wert=1 Then p=1 End Select If p=1 Or p=-1 Then record=Int(Rnd#(1000,3000)) If p=0 Then record=Int(Rnd#(4000,10000)) EndIf angle=(angle+p) Mod 360 RotateSprite kreuz,angle End Function ;--Bewegungsfunktion-- Function move() xspeed=MouseXSpeed() yspeed=MouseYSpeed() If EntityPitch(camera)<-80 And yspeed<0 Then yspeed=0 If EntityPitch(camera)>80 And yspeed>0 Then yspeed=0 If xspeed>0 Then x=x-(0.1*xspeed) If xspeed<0 Then x=x-(0.1*xspeed) If yspeed>0 Then y=y+(0.1*yspeed) If yspeed<0 Then y=y+(0.1*yspeed) If KeyDown(200) Then MoveEntity camera,0,0,0.1 If KeyDown(208) Then MoveEntity camera,0,0,-0.1 If KeyDown(203) Then x=x+2 If KeyDown(205) Then x=x-2 RotateEntity camera,y,x,0 End Function Danke für die Hilfe im Vorraus. Das ist halt wie gesagt nur noch das Problem, dass die Pfeile falsch verschossen werden. Mfg, Datis |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wo erstellst du das Array?
Du hast nichts aus meiner Hilfestellung gelernt, ehrlich gesagt. Lies es nochmals in Ruhe durch. Wenn du es dann NICHT begreiffst, fragst du nochmals. EDIT: Dazu kannst du nicht sagen dass Info\mesh=boby2 ist, weil du dann sagst es soll der Rückgabewert von dem werden. Schau dir mal Copyentity an. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht sehe ich auch den Sinn nicht, aber wozu sollte man für eine so einfache Sache Types mit Arrays mischen? Es genügt doch jedem Typeschuss ein Alter mitzugeben, welches immer weiter verjüngt wird. Ist das Alter 0 erreicht oder landet der Schuss einen Treffer, wird der Schuss gelöscht. Somit liessen sich auch unterschiedlich schnelle Schüsse in ihrem Erreignisradius beeinflussen. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
DATIS |
![]() Antworten mit Zitat ![]() |
---|---|---|
hey, nici.
boby2 ist der copyentity von boby. das mit dem alter klingt plausibel. das baue ich gleich ein. ABER meine frage war, warum die nicht geradeaus fliegen. mfg |
||
Frauen und Technik?
Männer und BHs? Beides möglich. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weil du TurnEntity cam,0,35,0 gemacht hast, aber den Schuss nicht auf den Kamerawinkel angepasst hast. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group