objekte und allgemeine logik von bb, erste schritte

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Thomas

Betreff: objekte und allgemeine logik von bb, erste schritte

BeitragMo, Jul 12, 2004 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
ein schönes hallo euch allen!

seit nun 3 Tagen sitze ich vor bb und versuche einiges an logischen Abläufen zu verstehen. Vor einiger Zeit hatte ich mich mit der damaligen A4 Demo etwas beschäftigt, nach dem Ablaufen der 30 tägigen Demo konnte ich mich allerdings noch nicht zu einer Investition von 100,- entscheiden. Das schöne an dem Schript von der A4/A5 Engine ist ihre starke Ähnlichkeit zu C, deren Syntax mir vertraut ist.

Nun, als ich auf bb gestoßen bin war ich sehr überrascht, jetzt hingegen bin ich eher frustriert.

Dieser ständig währende Gedanke "du blickst es nicht" nagt an meiner Geduld.


...

So, ok

nachdem ich einige Ideen entwickelt habe möchte ich diese umsetzten und vielleicht auch zu einem ganzen Game ausarbeiten, sofern die Sprache und mein "Hirn" mitspielen.

Sehr lobenswert finde ich die "FEHLENDE" Zeitbegrenzung der Demoversion, so kann ich in aller Ruhe alles ausprobieren.

...

Ich möchte nun einfach einen Schuss abfeuern! So einfach das auch klingt.
Dieser Schuss soll aus einem 3D Element bestehen und folgende Werte besitzen:

-name
-mesh
-power
-speed
-rate
-lifetime


ok... nun sollte ein schuss abgegeben werden, abhängig von der jeweiligen position und dem Space Button...

nun ist der Umgang (arrrrgh) mit den Objekten und deren Werten nicht einmal mein vorrangiges Problem sondern die Kombination von Projektil erzeugen und vorwärts bewegen... schon ohne Schaden....

Das bewegen hatte ich auch ohne Probleme bereits am Anfang raus, als ich dann allerdings mehrere hintereinder erzeugen wollte wurde es immer mehr rätselhafter....

ich vermisse einen Zeiger und Objekte....?

---...

wenn space gedrückt wird

erzeuge neues abhängig von dessen Feuerrate Projektil(kugel,vor waffe) -- weise im NrX zu

bis taste losgelassen wird

dann

bewege "jedes" Projektil NrX mit X Geschwindigkeit vorwärts
bis es auf eine X Entfernung entfernt ist
und lösche es dann

(vergiss Kollision... vorerst)

----------

wichtig hier ist dass jedes Projektil "unabhängig" ist
eben ein eigener Prozess der "gelistet" ist bis er erlischt
die eigenschaften müssen auch ausgelesen und später dann beachtet werden

ich habe auch vor mind. 5 verschiedene Waffen zu erschaffen, mit allem was dazugehört... das allerdings erst später

der witz ist auch das ich ein Projektil bereits erzeugt hatte, aber eben immer nur eines, das das andere "ersetzt" hat.


die CopyEntity Geschichte ist mir auch ein Rätsel.... selbst der (wirklich garnicht dokumentierte) Quelltext der Beispieldatei "firepaint3d.bb" indem ja eigentlich die Lösung meines Problemes beinhaltet ist, konnte mir nicht helfen....


hilft mir doch bitte jemand das alles zu verstehen...

...

wer von euch hier allen ist eigentlich bereits mit einem Projekt fertig geworden und wie ist es denn geworden?

Ich hoffe doch hier treiben sich auch ein paar "Alte Hasen" herum Laughing

...falls ich mich doch überzeugen kann etwas Geld in bb zu investieren, und das werde ich sicher erst tun wenn ich eine Aussicht auf vollen Erfolg habe, könnt ihr euch sicher auf ein sehr geniales Game gefasst machen! Smile

so, your turn

Thomas
Konfuzius sprach: "Ich bin kein Mensch, der von Geburt an schon alles wusste. Ich bin aber ein Mensch, der zugleich das Alte verehrt und in seinem Streben unermuedlich ist."

Mr.Keks

BeitragMo, Jul 12, 2004 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
.... hast du dir schonmal types angeschaut? mit denen kann man eigentlich sehr schön alles objektmäßige machen...

Code: [AUSKLAPPEN]
type s_schuss ; alle sachen, die mit dem s-objekt zu tun haben, bekomme so ein hübsches s_ als präfix
 field name$
 field mesh
 field power
 field speed#
 field rate
 field lifetime
end type


; funktionen dazu
function s_createschuss(bla,bla)
 s.s_schuss = new s_schuss
 ;werte zuweisen
end function

function s_updateschuss(s.s_schuss)
 moveentity s\mesh,0,0,s\speed
 ;blabla
 s\lifetime = s\lifetime - 1
 if s\lifetime = 0 then freeentity s\mesh : delete s.s_schuss
end function

function s_updateschuesse()
 for s.s_schuss = each s_schuss
  updateschuss(s)
 next
end function
einfach mal so im browserfenster geschrieben.
MrKeks.net

Markus2

BeitragMo, Jul 12, 2004 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
@Thomas

Was du vor hast geht super leicht wenn du dich ein wenig
mit BB auskennst .
Kannst ja mal im CodeArchiv rummballern auf Würfel angucken .
Einschußlöcher zeige ich dort nicht aber die sind auch kein
Problem und sind vom prinzip her gleich .

Also du brauchst Types was du als Strukturen kennst .
Diese kann man mit Each durch gehen und so weiter .
Mit Delete einfach löschen , gelöschte kann man in
der gleichen Schleife auf = NULL prüfen .

CopyEntity ist auch leicht zu verstehen ,
es macht ein neues 3D Objekt wobei man dort
außer das Mesh (also Drahtgitter) fast alle Eigenschaften verändern
kann , wie Farbe , Scalierung , Alpha und so .
Das was du als Vorlage nimmst nach dem laden einfach
verstecken mit HideEntity .
Wenn du ein Entity erzeugst bekommst du ein Handle was
du dir merken mußt im Type . Wenn du den Type
löschen möchtest einfach vorher FreeEntity benutzen und
alle bleibt sauber . Diese Types sind eine globale Collection ,
also alles was du da hinein tust wird zu einer die du ja mit
Namen festgelegt hast hinzugefügt .
Also auch in Functionen ! Darum wenn du die in Funk. temp.
erzeugst mußte die auch wieder frei geben sonnst geht dein
Speicher voll !
Eine Nr. brauchste auch nicht wirklich weil du dir das Handle
vom Type auch merken kannst , z.B. von wem der Schuß
kam . Wird jetzt jemand getroffen kannste direkt in die
Struktur vom Schützen schreiben und z.B. die Punkte erhöhen .
Also BB ist für den Preis sehr gut , bei den meisten scheitert
es wohl erst am eigenen können als an das was BB bietet .

Ein Manko hat BB noch was mich nervt , und zwar kann man
nicht alle Werte wieder auslesen die man gesetzt hat und
darum muß man die extra merken , sowas stört z.B.
wenn man sich nen Leveleditor macht .
Aber da hat Mark schon ein paar Sachen behoben wie
z.B. das auslesen des Texture Dateinamens einer Surface und so .
DX7 ist für den Hobby Bereich auch noch ausreichend und
das wird wohl später abgelößt durch OpenGL Smile

Thomas

BeitragMi, Jul 14, 2004 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
danke euch beide!

das hat nach etwas einarbeitung prima funktioniert. das kleine Würfel Game ist auch nicht übel.


nun habe ich noch ein paar Verständnisprobleme mit dem definieren von Typen,
ich habe zuerst einen Type Force mit.... Fields definiert, dann weiter ein weapon1.Force = New Force,....... und nun möchte ich in der nun hier beschriebenen Funktion s_createschuss() via CopyEntity einen neuen Schuss erzeugen.
Das funktioniert auch soweit, aber nur ein paar Schuss lang, dann bekomme ich die Fehlermeldung "Entity does not exist".

Wenn ich dort direkt ein globales Mesh ohne Type übergebe funktioniert alles. Woran kann das liegen?
Denn mein Hintergedanke ist alles offen zu halten um der Funktion jeweils das Entity/Mesh zu übergeben, das mit der derzeitigen Waffe in Verbindung steht. Eben mehr ein "wie kann ich richtig auf Typen und deren Variablen zugreifen und wie verhalten sich jene".


---------------

Function s_createschuss()

s.Force = New Force

s\entity =CopyEntity(force_blaster\entity) ;erzeugt Fehler
s\speed =0.1 ;sollte auch auf forceblaster ausgelegt werden
s\rate =100
s\lifetime =200

PositionEntity s\entity,EntityX(Player1\weapon,True),EntityY(Player1\weapon,True)-0.3,EntityZ(Player1\weapon,True)
EntityType s\entity,type_force


End Function


---------------------------

Jetzt habe ich auch eine zweite solche Funktion die im Grunde genau das selbe erzeugt, nur eben einen anderen Schuss.
Meiner Frage: wie aknn ich direkt, via Call by Value einen Type übergeben der die Eigenschaften eines vorher definierten Waffentypes enthält?




So... zwei andere Probleme habe ich auch noch, aber ich denke es ist besser dafür einen neuen Thread zu öffnen.


greetings
Konfuzius sprach: "Ich bin kein Mensch, der von Geburt an schon alles wusste. Ich bin aber ein Mensch, der zugleich das Alte verehrt und in seinem Streben unermuedlich ist."

Markus2

BeitragMi, Jul 14, 2004 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
So,
das sollte erstmal deine Fragen beantworten Smile
Bei BB mußte auch aufpassen das es nicht selber
Variablen definiert durch evtl. falsche Schreibweise .

Code: [AUSKLAPPEN]

Type PlayerType
 field Entity
 field EntityWaffe
end type
Type SchussType
 field ...
 field speed#
 field p.PlayerType
end type
global eforceblaster=loadmesh(...)
NameEntity eforceblaster,"Blaster"
EntityType eforceblaster,type_force ;<- reicht glaube ich einmal (wegen
CopyEntity)

Function s_createschuss.SchussType(p.PlayerType)

s.SchussType= New SchussType
s\p=p ;<- :-)

s\entity =CopyEntity(eforceblaster)

local speed#
select entityname(eforceblaster)
case "Blaster"
 speed=0.1
default
 speed=0.01
end select

s\speed =speed
s\rate =100
s\lifetime =200

PositionEntity s\entity,EntityX(p\EntityWaffe,True),EntityY(p\EntityWaffe,True)-0.3,EntityZ(p\EntityWaffe,True)

RotateEntity ....

 return s ;wenn man es gebrauchen kann

End Function

Function SchussFree(s.SchussType)

 freeentity s\entity
 delete s

End Function

Thomas

BeitragSa, Jul 17, 2004 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmmmmmmmmmmmm, hmmmmmmmmmmm, hmmmmmmmmm
hmmm, hmmm, hmm

also... ich habe nun wirklich längere Zeit drüber nachgedacht, komme aber dennoch zu keinem klaren Ergebnis.

Die Types scheinen mir doch mehr ein Rätsel zu sein als ich dachte. Gibt es hierfür irgendwo ein "erleuchtendes" Tutorial?

Aber nun noch zum eigentlichen:


Code: [AUSKLAPPEN]



type Force
field speed#,lifetime,power,rate,entity
...

entitytype entity.Force,type_force

force_blaster.Force = new Force
force_laser.Force = new Force
force_minnigun.Force = new Force

force_blaster\speed = .3
force_blaster\lifetime = 300
force_blaster\power = 10
force_blaster\rate = 80
force_blaster\entity = loadmesh("...")

force_laser\speed = .8
force_laser\lifetime = 400
force_laser\power = 20
force_laser\rate = 50
force_laser\entity = loadmesh("...")

force_minnigun\speed = .4
force_minnigun\lifetime = 200
force_minnigun\power = 15
force_minnigun\rate = 40
force_minnigun\entity = loadmesh("...")





so sollte die Definition der Waffen aussehen. Eben extern, sogar in einer anderen Datei.
Nun sollte eben das jeweilige, mit der Waffe in Verbindung stehende, Geschoss erzeugt werden, nur scheint das eben nicht direkt zu funktionieren. Vor einer case Abfrage werde ich mich hüten, da eine Funktion keine Werte beinhalten sollte. So müsset ich auch bei z.B. 20 verschiedenen Waffen 20 cases in der Funktion Schreiben und es währe nach außen hin sehe unflexibel...
Ich komme so und so nicht um eine zweite Funktion herum die die akuelle Waffe setzt, dazu scheine ich noch einen Weiteren Type zu benötigen der die aktuellen Waffenwerte beinhaltet. Soweit sogut....
aber wie kann ich nun "ganze" Inhalte hin und her schieben?
"illegal Type conversation" bakomme ich ständig vor die Nase geknallt wenn ich verschiedenes durchprobiere.

oh, man....
wenn ich nur an all das denke....

besonders... habe ich kein direktes Problem mit dem was ich will, vielmehr aber ein Problem mit dem wie ich es erreiche...


ich muss noch einen thread öffnen Laughing



Thomas
Konfuzius sprach: "Ich bin kein Mensch, der von Geburt an schon alles wusste. Ich bin aber ein Mensch, der zugleich das Alte verehrt und in seinem Streben unermuedlich ist."

Thomas

BeitragSo, Jul 18, 2004 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Idea dang!!!

ich habe die Lösung! Dank euch beiden und ganz besonders dir Markus2 habe ich nun entlich den entscheidenden Denkprozess initialisieren können 8)


Exclamation mein Fehler wahr ständig der PUNKT! (.) den ich immer noch als eine Art Operator angesehen habe... Auch gab es immer einen merkwürdigen Abbruch mit "Entity does not exist" exakt im 299 gerenderten Frame, das lag allerdings an einer Namesgleichheit.


So, nun kann ich in aller Ruhe so viele Waffen erzeugen wie ich möchte, sogar welche entfernen, und dennoch mit den Tasten Bild-Hoch, Bild-Runter jede Waffe durchwechseln, sogar via 1-4 jede Waffe direkt auswählen!

Code: [AUSKLAPPEN]


f.Force    = New Force
f\name    = "blaster"
f\speed    = .3
f\lifetime    = 300
f\power    = 10
f\rate    = 80
f\entity    = CreateSphere(5)
ScaleEntity f\entity,0.15,0.1,0.1

f.Force    = New Force
f\name    = "laser"
f\speed    = .8
f\lifetime    = 400
f\power    = 20
f\rate    = 50
f\entity    = CreateSphere(5)
ScaleEntity f\entity,0.3,0.1,0.1

f.Force    = New Force
f\name    = "minnigun"
f\speed    = .4
f\lifetime    = 200
f\power    = 15
f\rate    = 40
f\entity    = LoadMesh("mesh_beamer.3ds")
ScaleEntity f\entity,1,1,1

f.Force   = New Force
f\name    = "nuka"
f\speed    = .3
f\lifetime    = 300
f\power    = 100
f\rate    = 200
f\entity    = LoadMesh("mesh_beamer.3ds")
ScaleEntity f\entity,2.6,2.5,2.5


Function weaponSelect.SelectedWeapon(inna$)

   For chk.Force = Each Force
   
      If chk\name = inna Then
   
         sel.SelectedWeapon = First SelectedWeapon
         
         sel\name       = chk\name
         sel\power       = chk\power
         sel\entity       = chk\entity
         sel\speed       = chk\speed
         sel\lifetime    = chk\lifetime
         sel\rate       = chk\rate

         Exit
      
      End If

   Next
   
   Return sel

End Function




Nun fehlt nur noch ein - existiert die waffe im inventar oder nicht.

ich bin gestern erst gegen 4:00 Morgens ins Bett gegengen. Nach der Lösung konnte ich dies aber in Frieden tun 8)


greetings
Konfuzius sprach: "Ich bin kein Mensch, der von Geburt an schon alles wusste. Ich bin aber ein Mensch, der zugleich das Alte verehrt und in seinem Streben unermuedlich ist."

Markus2

BeitragSo, Jul 18, 2004 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo,
du scheinst schnell zu lernen Smile

Meinst du so ?

Code: [AUSKLAPPEN]


global selWeapon.Force ;<- kann man auch im Spieler Type unter bringen

selWeapon=weaponFind("nuka")
if selWeapon<>null then
 '... kann schießen
endif

Function weaponFind.Force (inna$)
   
   local chk.Force   

   For chk.Force = Each Force     
      If chk\name = inna Then  return chk
   Next
   
   Return null

End Function

Markus Rossé

BeitragSo, Jul 18, 2004 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Nachtrag (oder falls jemand mal Suchfunktion benutzt):

Zitat:

Die Types scheinen mir doch mehr ein Rätsel zu sein als ich dachte. Gibt es hierfür irgendwo ein "erleuchtendes" Tutorial?


Types Kompakt
Types Ausführlich

cu, Markus Rossé

tft

BeitragMo, Jul 19, 2004 9:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.....

er scheint schon die eine oder andere erfahrung gemacht zu haben. Freut mich das es noch Anfänger in BB mit solchen Potencial gibt.

Fiel Spass noch.....
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!
 

getlose

BeitragMo, Jul 19, 2004 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
stimme tft zu !

Thomas

BeitragDi, Jul 20, 2004 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Lobeshymnen jetzt bereits??? Wink

INTP ist mein Persönlichkeitstyp laut Keirsey übrigens, falls es jemanden interessiert. Freue mich als rational Denkender auf dieser Welt zu sein Very Happy


natürlich hat man das eine oder andere bereits im neuralen Netz implementiert, aber BB ist doch wieder etwas Neues....
nun sitze ich hier mit einem Stift und einem Block und gehe zum ersten mal das Ganze in der Theorie durch.... Waffen Mesh hier, Besitz dort, Munition dort, Schuss dort, wenn ja dann, wenn nicht dann nicht... ihr wisst ja....



greetings
Konfuzius sprach: "Ich bin kein Mensch, der von Geburt an schon alles wusste. Ich bin aber ein Mensch, der zugleich das Alte verehrt und in seinem Streben unermuedlich ist."

Markus2

BeitragDi, Jul 20, 2004 23:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau ,
gute Planung gehört dazu Smile

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group