sprites

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

noobyblaster

Betreff: sprites

BeitragSa, Jul 18, 2009 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
nur ne einfache frage: =)
kann ich in B3D eine collision mit sprites machen, also das ich mit einer 3d figur z.b. nicht durch einen baum der als sprite im spiel ist durchfahren kann
oder geht das nicht?
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Chrise

Betreff: Re: sprites

BeitragSa, Jul 18, 2009 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du damit meinst, dass transparente Stellen nicht kollidieren können, dann nein. Ansonsten ist ein Sprite ja auch nur ein Mesh mit 2 Polygonen - von daher ansich ja.
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

noobyblaster

BeitragSo, Jul 19, 2009 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
naja ich meine wenn du einfach ein bild mit "loadsprite" lädst
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Jul 19, 2009 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht ganz gut zum Beispiel mit EntityRadius (wie mit allen Entities von Blitz3D).
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

noobyblaster

BeitragSo, Jul 19, 2009 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
und wiedermal verneige ich mich vor den schlauen leuten =)
thx!
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

noobyblaster

BeitragMo, Jul 20, 2009 10:43
Antworten mit Zitat
Benutzer-Profile anzeigen
axo und wie is das dann wenn ich den sprite als schuss verwenden will ?
wie kann ich das machen das ich da eine collision reinbekomme?
Code: [AUSKLAPPEN]
For  s.schuss = Each schuss   
MoveEntity s\s,0,0,5           
Next
If KeyHit(29) Then   
s.schuss = New Schuss 
s\s = LoadSprite("Bilder\schuss.png") 
s\x = EntityX(Figur)       
s\y = EntityY(Figur)
s\z = EntityZ(Figur)
PositionEntity s\s,s\x,s\y + 2,s\z     
RotateEntity s\s,EntityPitch(Figur),EntityYaw(Figur),EntityRoll(Figur)
End If
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%
 

Krischan

BeitragMo, Jul 20, 2009 12:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau Dir mal Entitytype an. Gib dem Sprite einen Type und prüfe ihn mit dem Collisions Befehl mit dem zu kollidierenden Objekt. Und Updateworld nicht vergessen...

noobyblaster

BeitragMo, Jul 20, 2009 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
ja das hab ich schon gemacht und das hat nicht funktioniert darum ja meine frage an die Profis=)
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jul 20, 2009 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Also Krischan ist durchaus ein Profi. Wollen ihm doch nichts unterstellen hier Wink

Zu deinem Problem, beachte das Entities nur aus ihrer Bewegung heraus kollidieren können. Das heisst, ''berühren'' sie sich, ohne weiterer Bewegungsanweisungen, dann wird auch keine Kollision mehr registriert. Auch funktionieren Kollisionen unter Blitz3D nicht, wenn die Objekte schon ineinander erstellt werden. Sie müssen also unberührt erstellt werden und können erst dann aufeinander kollidieren.

Edit1: Die Vorschläge von Krischan sind im pbrigen wirklich gut. Überprüfe das alles erstmal.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Krischan

BeitragMo, Jul 20, 2009 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei so fundamentalen Sachen ist es am Besten, zuerst eine sehr einfache Umgebung mit nur den notwendigsten Entitys zu basteln und erst einmal das Prinzip zu verstehen, und erst dann das Ganze auf das "Big Picture" zu übertragen. Das hat mir immer sehr geholfen den Blitzsyntax und gewisse Abläufe / Abhängigkeiten zu verstehen.

noobyblaster

BeitragMo, Jul 20, 2009 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ja ok ich werd mir das alles nochmal genau anschauen und wenns nicht geht frag ich wieder nach Smile
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%
 

Krischan

BeitragMo, Jul 20, 2009 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mal schnell ein Schussbeispiel gebastelt, ich hoffe es ist einfach genug, ist aber soweit alles drin was man wissen muss. Einfach mit der linken Maustaste auf die Kugel feuern, was kollidiert bleibt an der Kugel hängen, der Rest geht vorbei und wird bei zu großer Distanz gelöscht.

BlitzBasic: [AUSKLAPPEN]
Graphics3D 800,600,32,2

Type schuss

Field entity%
Field speed#

End Type

cam=CreateCamera()
CameraRange cam,0.1,1000

; Zieldummy als Mauscursor (Fadenkreuz quasi)
dummy=CreateSprite()
ScaleSprite dummy,2,2
EntityColor dummy,255,0,0
EntityOrder dummy,-1

; Zielscheibe erstellen, Kollisionstyp 2
ziel=CreateSphere(32)
PositionEntity ziel,0,0,50
ScaleEntity ziel,10,10,10
EntityType ziel,2

; Kollisionsmodell
Collisions 1,2,2,1

While Not KeyHit(1)

; Schusszähler zurücksetzen
schuesse=0

; Zieldummy an Mauscursor hängen
PositionEntity dummy,MouseX()-400,-(MouseY()-300),400

; LMB = 1 Schuss alle 50 Millisekunden
If MouseDown(1) And MilliSecs()-ms>50 Then

; neuen Schuss erstellen
s.schuss = New schuss
s\entity=CreateSprite()
s\speed#=0

; ausrichten
PositionEntity s\entity,0,-1,0
ScaleSprite s\entity,0.1,0.1
PointEntity s\entity,dummy
EntityAutoFade s\entity,1,400

; wichtig für Kollision: Typ 1 und Kollisionsradius
EntityType s\entity,1
EntityRadius s\entity,0.05,0.05

; Zeitzähler zurücksetzen
ms=MilliSecs()

EndIf

; alle Schüsse durchgehen
For s.schuss = Each schuss

; Schuss zu weit weg von der Kamera? Schuss löschen
If EntityDistance(s\entity,cam)>400 Then

FreeEntity s\entity
Delete s.schuss

; mit einem Ziel kollidiert? zählen und löschen
ElseIf EntityCollided(s\entity,2) Then

Delete s.schuss
treffer=treffer+1
schuesse=schuesse-1

; sonst muss der Schuss noch unterwegs sein - zählen und bewegen
Else

schuesse=schuesse+1
s\speed=s\speed+0.1
MoveEntity s\entity,0,0,s\speed

EndIf

Next

UpdateWorld

RenderWorld

Text 0, 0,"Schüsse unterwegs: "+schuesse
Text 0,15,"Treffer..........: "+treffer

Flip

Wend

End

noobyblaster

BeitragDi, Jul 21, 2009 1:09
Antworten mit Zitat
Benutzer-Profile anzeigen
also so wie ich das verstanden hab mit EntityRadius.
hab ich das richtig verstanden?Very Happy
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%
 

Krischan

BeitragDi, Jul 21, 2009 7:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Es würde auch ohne extra Entityradius gehen, allerdings wäre der Radius dann 1, meine ich - sollte man schon definieren, in meinem Beispiel gibt das halt eine sehr feine Kollisionsabfrage dadurch.

noobyblaster

BeitragDi, Jul 21, 2009 10:36
Antworten mit Zitat
Benutzer-Profile anzeigen
alles klar =)
Projekt: Crazy Racedriver [vorübergehend eingestellt]
Genre: Rennspiel
Fortschritt: ca. 60%

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group