objekte und allgemeine logik von bb, erste schritte
Übersicht

![]() |
ThomasBetreff: objekte und allgemeine logik von bb, erste schritte |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() ...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! ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
.... 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
einfach mal so im browserfenster geschrieben.
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 |
||
MrKeks.net |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 ![]() |
||
![]() |
Thomas |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
So,
das sollte erstmal deine Fragen beantworten ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() ich habe die Lösung! Dank euch beiden und ganz besonders dir Markus2 habe ich nun entlich den entscheidenden Denkprozess initialisieren können 8) ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo,
du scheinst schnell zu lernen ![]() 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é |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
stimme tft zu ! | ||
![]() |
Thomas |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lobeshymnen jetzt bereits??? ![]() INTP ist mein Persönlichkeitstyp laut Keirsey übrigens, falls es jemanden interessiert. Freue mich als rational Denkender auf dieser Welt zu sein ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau ,
gute Planung gehört dazu ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group