Schüsse in Blitz3d

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Flausch96

Betreff: Schüsse in Blitz3d

BeitragSo, Jun 05, 2011 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versuche mich gerade daran einen 3d spaceshooter zu proggen. Ich komme allerdings bei den schüssen der Raumschiffe nicht weiter.

Soweit bin ich schon mit dem Code für die Schüsse:

BlitzBasic: [AUSKLAPPEN]
Type schuss
Field Laserstrahl
End Type

Function Schießen
S/Laserstrahl = CreateCylinder()
PositionEntity s\Laserstrahl,EntityX(Raumschiff),EntityY(Raumschiff),EntityZ(Raumschiff)+5
End Function


Und in der Hauptschleife:
BlitzBasic: [AUSKLAPPEN]
If MouseDown(1) Then Schießen()


Aber wenn ich das programm ausführe zeigt er immer die Fehlermeldung "Entity does not exist" Crying or Very sad
Woran liegt das ?
(und wie geht der code für die schüsse weiter ? Embarassed )

Holzchopf

Meisterpacker

BeitragSo, Jun 05, 2011 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wahrscheinlich ist die Variable Raumschiff nicht global definiert, das heisst, in der Funktion kann Blitz dann nicht darauf zugreifen.

Und das "ß" im Funktionsnamen bereitet keine Probleme? Das ist mir auch neu - ich dachte immer, Variablen- und Funktionsnamen in Blitz dürften nur englische Zeichen (also auch keine Umlaute) enthalten.

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

ToeB

BeitragSo, Jun 05, 2011 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, der Umlaut sollte in Blitz3D nicht anerkannt werden (Expecting "(" blablubb).


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Flausch96

BeitragSo, Jun 05, 2011 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe jetzt das ß entfernt

BlitzBasic: [AUSKLAPPEN]
Type schuss
Field Laserstrahl
End Type

Function Schiessen()
S/Laserstrahl = CreateCylinder()
PositionEntity s\Laserstrahl,EntityX(Raumschiff),EntityY(Raumschiff),EntityZ(Raumschiff)+5
End Function


Aber jetzt kommt die Meldung Expecting 'End Function'

Was ist jetzt der Fehler ?

Holzchopf

Meisterpacker

BeitragSo, Jun 05, 2011 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Welche Zeile markiert denn der Debugger?

Ich Tippe mal auf BlitzBasic: [AUSKLAPPEN]
S/Laserstrahl = CreateCylinder()
, weil "/" in BB eine Division ist und "\" (wie du in der Zeile darunter richtig geschrieben hast) der Feld-Zugriffs-Wiemandemauchimmersagt... Ausserdem: Wird "S" irgendwo als Variable des Typs schuss deklariert?
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Flausch96

BeitragSo, Jun 05, 2011 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie meinst du dass ?

Zitat:
Wird "S" irgendwo als Variable des Typs schuss deklariert?





(Sorry für die blöden fragen, bin noch anfänger Embarassed )

MisterMaboo

BeitragSo, Jun 05, 2011 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
gibt es ein
Code: [AUSKLAPPEN]

s.schuss=new schuss
?

ich nehme an, das ist es was holzchopf meint
Man is the information he carries

Flausch96

BeitragSo, Jun 05, 2011 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Type schuss
Field Laserstrahl
End Type

s.schuss=New schuss

Function Schiessen()
S\Laserstrahl = CreateCylinder()
PositionEntity s\Laserstrahl,EntityX(Raumschiff),EntityY(Raumschiff),EntityZ(Raumschiff)+5
End Function
;-------------


So, jetzt kommt die Meldung "Variable must be a Type"
und Markiert die stelle BlitzBasic: [AUSKLAPPEN]
S\Laserstrahl = CreateCylinder()
 

Tigerass

BeitragSo, Jun 05, 2011 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
s.schuss=New schuss

muss vor:

s\Laserstrahl = CreateCylinder()

Würde ich mal sagen.

Ich habe es mal so gemacht:
BlitzBasic: [AUSKLAPPEN]


Function CreateBullet()
b.Bullet = New Bullet
b\speed = 300
b\timeout = MilliSecs() + 1000
b\model = CreateSphere()
PositionEntity (b\model,EntityX(Camera),EntityY(Camera),EntityZ(Camera))
EntityType (b\model,TYPE_BULLET)

End Function
  • Zuletzt bearbeitet von Tigerass am So, Jun 05, 2011 18:27, insgesamt 4-mal bearbeitet

MisterMaboo

BeitragSo, Jun 05, 2011 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
wird wohl daran liegen dass die funktion auf die variable nicht zugreifen kann, mach sie global.

Code: [AUSKLAPPEN]
Type schuss
Field Laserstrahl
End Type

Global s.schuss=New schuss

Function Schiessen()
s\Laserstrahl = CreateCylinder()
PositionEntity s\Laserstrahl,EntityX(Raumschiff),EntityY(Raumschiff),EntityZ(Raumschiff)+5
End Function



wenn du es so umsetzt, gibt es nur einen schuss zur zeit. wenn du mehrere schüsse auf einmal sehen willst, mach es so wie tigerass und erstelle jedes mal einen neuen "s.schuss" wenn du die funktion aufrufst
Man is the information he carries
  • Zuletzt bearbeitet von MisterMaboo am So, Jun 05, 2011 17:03, insgesamt einmal bearbeitet

Flausch96

BeitragSo, Jun 05, 2011 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Type schuss
Field Laserstrahl
End Type


Function Schiessen()
s.schuss=New schuss
S\Laserstrahl = CreateCylinder()
PositionEntity S\Laserstrahl,EntityX(Raumschiff),EntityY(Raumschiff),EntityZ(Raumschiff)+5
End Function


Jetzt kann ich das spiel starten. Aber wenn ich schießen will kommt die Meldung "Entity does not Exist".
Er markiert die stelle
BlitzBasic: [AUSKLAPPEN]
PositionEntity S\Laserstrahl,EntityX(Raumschiff),EntityY(Raumschiff),EntityZ(Raumschiff)+5 
 

Tigerass

BeitragSo, Jun 05, 2011 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Schreibe oben an deinem Code noch:

BlitzBasic: [AUSKLAPPEN]
Global Raumschiff

Type schuss
Field Laserstrahl
End Type


LG Tigerass
  • Zuletzt bearbeitet von Tigerass am So, Jun 05, 2011 17:29, insgesamt einmal bearbeitet

MisterMaboo

BeitragSo, Jun 05, 2011 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
ist dein raumschiff denn global?

Edit: zu langsam
Man is the information he carries

Flausch96

BeitragSo, Jun 05, 2011 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Könntet ihr mir mal einen einfachen beispiel code um schüsse zu erstellen geben ?

Habe es immer noch nicht so ganz verstanden wie das geht, und wenn ich ein beispiel sehe wird es mir vllt Klar. Embarassed
 

Tigerass

BeitragSo, Jun 05, 2011 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier Bitteschön:


BlitzBasic: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
HidePointer()


Global FreeLookXS#, FreeLookZS#, FreeLookRotXS#, FreeLookRotYS#, camera

Type Bullet
Field model
End Type


camera=CreateCamera() : PositionEntity(camera,0,2,0) : CameraRange(camera,0.01,100) : CameraClsColor(camera,0,100,200)
plane=CreatePlane() : EntityColor(plane,100,0,80) : light=CreateLight()


;---------------------------------------------------------------------------------------------------------------


While Not KeyDown(1)
FreeLook(camera)
If MouseHit(1) Then CreateBullet()
RenderWorld()
Flip()
Wend
End


;---------------------------------------------------------------------------------------------------------------

Function FreeLook(camera, sp# = .1)
If sp# > 0 Then
FreeLookXS# = (FreeLookXS# + ((KeyDown(32) Or KeyDown(205)) - (KeyDown(30) Or KeyDown(203))) * sp#) * .35
FreeLookZS# = (FreeLookZS# + ((KeyDown(17) Or KeyDown(200)) - (KeyDown(31) Or KeyDown(208))) * sp#) * .35
MoveEntity camera, FreeLookXS#, 0, FreeLookZS#
EndIf
FreeLookRotXS# = ((MouseXSpeed() - FreeLookRotXS#) * .2 + FreeLookRotXS#) * .9
FreeLookRotYS# = ((MouseYSpeed() - FreeLookRotYS#) * .2 + FreeLookRotYS#) * .9
If EntityPitch(camera) + FreeLookRotYS# < -89 pitch# = -89 ElseIf EntityPitch(camera) + FreeLookRotYS# > 89 pitch# = 89 Else pitch# = EntityPitch(camera) + FreeLookRotYS#
yaw# = -FreeLookRotXS# + EntityYaw(camera)
RotateEntity camera, pitch#, yaw#, 0
MoveMouse GraphicsWidth() / 2, GraphicsHeight() / 2
End Function

;---------------------------------------------------------------------------------------------------------------

Function CreateBullet()
b.Bullet = New Bullet
b\model = CreateSphere()
PositionEntity (b\model,EntityX(Camera),EntityY(Camera),EntityZ(Camera))
RotateEntity (b\model,EntityPitch(Camera),EntityYaw(Camera),EntityRoll(Camera))
MoveEntity (b\model,0,0,5)
End Function



LG Tigerass
  • Zuletzt bearbeitet von Tigerass am So, Jun 05, 2011 17:35, insgesamt einmal bearbeitet

Flausch96

BeitragSo, Jun 05, 2011 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den Code so langsam versteh ich es Very Happy
 

Tigerass

BeitragSo, Jun 05, 2011 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe den Code noch etwas verbessert.
Eine UpdateBullet() Funktion musst du halt noch selber machen.
also in etwa so:

BlitzBasic: [AUSKLAPPEN]
For b. bullet = Each bullet
blablabla
Next


LG Tigerass

Flausch96

BeitragSo, Jun 05, 2011 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich die linke maustaste drücke werden die kugeln dann an der stelle erstellt wo die Kamera ist, aber wie stelle ich ein dass diese kugeln in die Richtung geschossen werden in die die Kamera zeigt ?

Flausch96

BeitragSo, Jun 05, 2011 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
oh, sorry die kugeln werden ja schon geschossen. Embarassed Embarassed Dann bedanke ich mich für eure hilfe und gedult. Hab vorerst keine Fragen mehr

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group