Collision

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

noobyblaster

Betreff: Collision

BeitragDi, Aug 04, 2009 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
moin,
ich hab ein spiel wo ich auch schießen kann.
die schüsse bleiben an dem getroffennem objekt "kleben"
wie kann ich das machen das an der stelle wo ein schuss mit dem objekt kollidiert ein sprite gezeichnet wird? (als so eine art einschuss)

(wenn möglich mit code da ich in if bedingungen immer voll abschmier Rolling Eyes )
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Nicdel

BeitragDi, Aug 04, 2009 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht mit CollisionX, CollisionY und CollisionZ. Dafür brauchst du CountCollisions. Für einen Code bin ich zu faul.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Snade

BeitragDi, Aug 04, 2009 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich vor einiger Zeit mal gemacht vieleicht hilft dir das weiter:

BlitzBasic: [AUSKLAPPEN]

Graphics3D 800, 600, 0, 1
SetBuffer BackBuffer()

Type Schuss
Field Entity
End Type

Global MX
Global MY
Global Magazin = 10


Plane = CreatePlane()
PositionEntity plane, 0, -20, 0

Cube = CreateCube()
PositionEntity Cube, 0,5,5
EntityColor Cube, 255, 145, 0
EntityFX Cube, 4
EntityType Cube, 3

Global Char = CreateSphere(64)
EntityType Char, 1

Cam = CreateCamera()
PositionEntity Cam, 0, 3, -7
EntityParent Cam, Char

Light = CreateLight(2)
PositionEntity Light, 0, 8, -20
LightRange Light, 15
EntityParent Light, Char

Repeat
Cls


If KeyDown(17) Then MoveEntity Char, 0, 0, 0.3
If KeyDown(31) Then MoveEntity Char, 0, 0, -0.3
If KeyDown(30) Then MoveEntity Char, -0.3, 0, 0
If KeyDown(32) Then MoveEntity Char, 0.3, 0, 0
If KeyDown(200) Then MoveEntity Char, 0, 0.3, 0
If KeyDown(208) Then MoveEntity Char, 0, -0.3, 0

;----------------------------
MX = MX -(MouseXSpeed()/4)
MY = MY +(MouseYSpeed()/4)
MoveMouse GraphicsWidth()/2, GraphicsHeight()/2
If MY > 90 Then MY = 90
If MY < -90 Then MY = -90
RotateEntity Char, MY, MX, 0
;----------------------------

For T.Schuss = Each Schuss
MoveEntity T\Entity, 0, 0, 1.5

If EntityDistance#(T\Entity, Char) > 100 Then
HideEntity T\Entity
Delete T.Schuss
EndIf
Next

If MouseHit(1) Then
If Magazin > 0 Then NeuerSchuss()
EndIf


Collisions 1, 3, 2, 1
Collisions 2, 3, 2, 1

UpdateWorld()
RenderWorld()

Text 20, 300, Magazin

Flip
Until KeyHit(1)
End


Function NeuerSchuss()

S.Schuss = New Schuss
S\Entity = CreateSphere()
ScaleEntity S\Entity, 0.1, 0.1, 0.1
PositionEntity S\Entity, EntityX#(Char), EntityY#(Char), EntityZ#(Char)
RotateEntity S\Entity, EntityPitch#(Char), EntityYaw#(Char), EntityRoll#(Char)

EntityRadius S\Entity, 0.1

EntityType S\Entity, 2

Magazin = Magazin - 1

End Function


Steuerung: wsad Maustasten und Maus^^

Tankbuster

BeitragDi, Aug 04, 2009 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt noch die möglichkeit das Sprite bei Kollision einfach an der Stelle des Geschosses zu erstellen.
Twitter
Download Jewel Snake!
Windows|Android

noobyblaster

BeitragDi, Aug 04, 2009 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich komm einfach nicht klar
Ich kriegs nicht hin das ich in meinem anderen spiel schießen kann
kann mir erstmal irgend einer einen code geben wo jeder begriff erklärt ist ?
ich will das endlich auch mal verstehen
also die schüsse sollen an das fadenkreuz(ziel) gebunden sein ,
das wiederum soll an die camera gebunden sein
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Tankbuster

BeitragDi, Aug 04, 2009 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Kanns sein, dass du da was vergessen hast.
Ich sehe keine Funktion noch sonstwas, was einen "Schuss" auslösen könnte.....
Twitter
Download Jewel Snake!
Windows|Android

noobyblaster

BeitragDi, Aug 04, 2009 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie?
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Nicdel

BeitragDi, Aug 04, 2009 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Klick auf die Begriffe drauf, dann öffnet sich eine Seite, die sie dir Erklärt...
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Snade

BeitragDi, Aug 04, 2009 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
warum soll er sich da noch Arbeit machen bei meinem Code is der Schuss auch schon drin ausserdem(kein sz auf der tastatur)ist der schuss auch schon konstant aus einer richtung von dem ball .

@noobyblaster

ich kann meinen code fuer dich nochmal kommentieren wenn du willst

EDIT1: habs mal schnell ein bisl was dazugeschrieben damits ein wenig uebersichtlicher wird



BlitzBasic: [AUSKLAPPEN]
Graphics3D 800, 600, 0, 1
SetBuffer BackBuffer()

Type Schuss ;schuss
Field Entity ;der schuss als entity
End Type

Global MX ;mousex
Global MY ; mouse y
Global Magazin = 10 ;munition


Plane = CreatePlane() ; boden
PositionEntity plane, 0, -20, 0

Cube = CreateCube() ;der wuerfel
PositionEntity Cube, 0,5,5
EntityColor Cube, 255, 145, 0
EntityFX Cube, 4
EntityType Cube, 3

Global Char = CreateSphere(64) ;die kugel die schiest
EntityType Char, 1

Cam = CreateCamera() ;camera die hinter der kugel ist
PositionEntity Cam, 0, 3, -7
EntityParent Cam, Char

Light = CreateLight(2) ; das licht
PositionEntity Light, 0, 8, -20
LightRange Light, 15
EntityParent Light, Char

Repeat
Cls

;;;;;;;;;; BEWEGEN , Steuerung ;;;;;;;;;;;;;;;;;
If KeyDown(17) Then MoveEntity Char, 0, 0, 0.3
If KeyDown(31) Then MoveEntity Char, 0, 0, -0.3
If KeyDown(30) Then MoveEntity Char, -0.3, 0, 0
If KeyDown(32) Then MoveEntity Char, 0.3, 0, 0
If KeyDown(200) Then MoveEntity Char, 0, 0.3, 0
If KeyDown(208) Then MoveEntity Char, 0, -0.3, 0

;----------------------------
MX = MX -(MouseXSpeed()/4) ; damit die maus nicht ueber 180 grad geht
MY = MY +(MouseYSpeed()/4)
MoveMouse GraphicsWidth()/2, GraphicsHeight()/2
If MY > 90 Then MY = 90
If MY < -90 Then MY = -90
RotateEntity Char, MY, MX, 0
;----------------------------

For T.Schuss = Each Schuss ; der schuss den man sieht
MoveEntity T\Entity, 0, 0, 1.5

If EntityDistance#(T\Entity, Char) > 100 Then ; wenn der schuss zu weit weg ist wird er
;versteckt und geloescht d
HideEntity T\Entity
Delete T.Schuss
EndIf
Next

If MouseHit(1) Then ;der schuss wird abgedrueckt :D
If Magazin > 0 Then NeuerSchuss()
EndIf


Collisions 1, 3, 2, 1 ;die collisionen der schuss und die kugel
Collisions 2, 3, 2, 1

UpdateWorld()
RenderWorld()

Text 20, 300, Magazin

Flip
Until KeyHit(1)
End


Function NeuerSchuss() ; schuss wird erstellt

S.Schuss = New Schuss
S\Entity = CreateSphere()
ScaleEntity S\Entity, 0.1, 0.1, 0.1
PositionEntity S\Entity, EntityX#(Char), EntityY#(Char), EntityZ#(Char)
RotateEntity S\Entity, EntityPitch#(Char), EntityYaw#(Char), EntityRoll#(Char)

EntityRadius S\Entity, 0.1

EntityType S\Entity, 2

Magazin = Magazin - 1

End Function

Tankbuster

BeitragDi, Aug 04, 2009 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Collisions sollte nie in einer Schleife aufgerufen werden Wink
Twitter
Download Jewel Snake!
Windows|Android

noobyblaster

BeitragDi, Aug 04, 2009 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok jetzt hab ich einigermasen verstanden danke
und wie konnte ich das mit dem einschuss lösen?
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Snade

BeitragDi, Aug 04, 2009 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
@tankbuster

warum nicht?

Nicdel

BeitragDi, Aug 04, 2009 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
@Snade: Man braucht es nur einmal um die Kollisionen zu definieren. Danach stehen sie fest.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Tankbuster

BeitragDi, Aug 04, 2009 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau. Ich habe gerade gesehen, dass es in der Onlinehilfe... im Beispiel auch in der Schleife angewendet wird. Ich kontaktiere mal jemanden, der das ändert (=
Twitter
Download Jewel Snake!
Windows|Android

Snade

BeitragDi, Aug 04, 2009 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
danke wieder was dazugelernt Smile

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group