Level+Events

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

erforderlich

Betreff: Level+Events

BeitragDi, März 08, 2005 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!
Ich habe keine Ahnung ob so etwas nich eher ins BeginnerBoard sollte,
aber hinterher versteht man mich da falsch..

Naja, wollte mal wissen, wie ihr so levels realisiert...
Ein Level muss ja nich nur gut Ausschaun sondern auch Interaktivität
bieten.. Gibt es da so Level Editoren, oder sollte man sich so was selber schreiben?? Allerdings habe ich noch keine Erfahrungen mit so etwas gemacht..

Nehmen wir als Beispiel, ein Licht, das angehen soll wenn man auf einer Art Schalter (unsichtbar) steht..(kA wie man das macht)
Diese Events oder wie mans nennt, sollten ja vorkommen..Das muss einfach..

Also, wie realisiert man eine Map mit Interaktivität?

Danke
 

Hex²

BeitragDi, März 08, 2005 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe jetzt noch nicht soviel Erfahrungen in Blitz3D, aber unabhängig davon würde ich mir einfach mal bei den "großen Spielen" ein wenig das Prinzip abschauen.

Dort hast Du dann Objekte wie z.B: Lichtschalter, Licht, Tür etc.
In einem Leveleditor fügst Du meinetwegen einen Lichtschalten und ein Licht ein. So könntest Du das Object Licht01 und Schalter01 haben. Mit irgendeinem Script würde ich dann die beiden zuordnen, daß Dein Programm weiß das dieser Schalter mit diesem Licht zusammengehört.

Nun würde ich eine Art Eventscript schreiben, in dem Du mit einer einfachen Funktion irgendwie sowas wie "PushButton("Schalter01")" oder so hast und das Script nun "selbstständig" das jeweilige Licht ein oder ausschaltet.

Das wäre aber dann auch die umfangreichste, sowie flexibelste Variante. Wenn Du nur ein winzigen Level hast, der der einzige ist, dann kann man sich auch Scripts schenken, allerdings gehe ich mal davon aus, daß Du kein Spiel machen würdest mit nur einem Level Razz
 

erforderlich

BeitragDi, März 08, 2005 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Jaaa...so weit war ich ja schon..
1. der schlater soll eine Art Feld sein, wenn man drüber geht, geht das Licht an
2. Ich wollte eigentl. mehr Details zum Scriptbereich
3. Das mit dem Prinzip abschauen: wo? Habe mich doch schon umgesehen...Das ist ja das was ich im Grunde wissen möchte
 

FBI-blitz

BeitragDi, März 08, 2005 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde mir selbst einen coden! Ist auch net soo schwer!
Computer 1: AMD Athlon64 3500+ | nVidia GF 7900GT | 1024 MB DDR-RAM | ASUS A8N-SLI Preimium | 250 GB SATA 2 || WindowsXP | Blitz3D | Blitz+
Computer 2: AMD AthlonXP 2400+ | ATI Radeon 9500 | 512 MB DDR-RAM | MSI K7N2 | 80 GB IDE | 160 GB IDE || WindowsXP | Blitz3D | Blitz+
Computer 3: Intel Pentium MMX | onBoard-Grafik | 32 MB RAM | 1 GB IDE || Windows 98 SE | Blitz+

Seoman

BeitragDi, März 08, 2005 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kommt daruaf an, wie du alles Speicherst. Z.B. könntest du jeden Objekt Typ in einem Type speichern. Dann Gäbe es z.B. folgendes

Code: [AUSKLAPPEN]

Type schalter
Field Mesh
Field x
Field y
Field z
Field Lampe
End Type


Dann schreibst du dein Programm so, dass es den Parameter "Lampe" verändert, wenn du eine Lampe wählst. In deinem Spiel überprüfst du das Feld Lampe und schaltest automatisch die zugehörige Lampe an.


mfg
Seoman


PS:
Etwas umständlich erklärt. Zur Not fragen.
In Australien...

Projekte sind zur Zeit wieder eingefroren und auf Designlevel zurueckgestuft... Generalueberholungen notwendig Wink
 

erforderlich

BeitragDi, März 08, 2005 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Also,
1.)
@Seoman
Ja...aber wo ich bei dem Problem wäre wie ich die Kollision zwischen
Schalter und Dem "Ich" überprüfen soll....
denn irgendwie muss der ja wissen wann das ´Licht angehen soll.
Allerding wenn ich Collsions benutze, verhakt sich das "Ich" mit dem Schalter -> Nix Gut.

2.)
Ich wollte nochma ein paa details zu solchen Scripts haben. Gibt's hier jemanden der sich da auskennt?

3.)
Hat jemand vielleicht Links oder das Wissen, um mir zu erklären wie das in den "großen" Spielen gemacht wurde..

Danke
 

Darren

BeitragDi, März 08, 2005 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
also erstens würde ich das auf keinen fall mit types machen. zumindest nicht im game. denn: die zahl der schalter ist bekannt, was die verwendung von arrays möglich macht. außerdem kannst du ja auch die entfernugn abfragen, was aber bei vielen schaltern so aufwändig ist. zb würde ich es erstmal nur checken ob ein schalter in reichweite ist wenn du eine taste drückst(aktionstaste).
MFG Darren
 

erforderlich

BeitragDi, März 08, 2005 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
reichweite = entitydistance, oder?
 

Darren

BeitragDi, März 08, 2005 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ja aber versuch es mal anders zu lösen. ich habe mich damit noch nicht befasst aber es müsste auch anders gehen.
MFG Darren
 

Hex²

BeitragDi, März 08, 2005 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wie ich das verstanden habe, soll das Licht nicht durch betätigen eines Schalters angehen, sondern durch "betreten" eines Schalters.

Dann mach es doch so:

Da die Koordinaten in der Map sich ja nicht ändern, erstell dir eine Arena die aus den Positionen besteht die man betreten muß (z.B. vom Boden bis zur Decke und von der linken Wand zu rechten) sobalt man hindurch geht oder diesen Bereich berüht geht das Licht an bzw. aus...
 

erforderlich

BeitragDi, März 08, 2005 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
@Hex²
Das ist genau das was ich gesucht habe! Kannst du mir das mal Erläutern.
Wie erstelle ich so eine Area, un wie Frage ich sie ab?
 

Hex²

BeitragDi, März 08, 2005 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, man könnte (ich weiß nicht wieviel Speicher das in Blitz frisst) als einfachste Methode einfach ein Cube oder ähnliches erstellen und Alpha auf 0 setzen und die Collision mit dem Spieler überprüfen. Oder Du nimmst halt die Weltkoordinaten und überprüfst ob Du ein bestimmten Bereich betrittst. Frag mich jetzt nicht wie genau, das kommt halt auch drauf an wie Du Dein Programm aufbaust.

So als Ansatz:
Types für eine Area und dann die Felder für x1, x2, y1, y2, z1, z2. Dort kannst Du quasi den Punkt oben Links an der Wand und Decke nehmen und eine Area bis unten rechts auf dem Boden und andere Wand ziehen

Bis zur Decke ist eigendlich nur wichtig, wenn man oben ein 2. Stockwerk hat auf das man laufen kann (sonst würde unten das Licht an und aus gehen wenn man oben auf die für unten bestimmte Stelle kommt)

Danach brauchst Du eigendlich nur die Spielerkoordinaten überprüfen ob sie in dem Bereich der Area liegen...
 

erforderlich

BeitragDi, März 08, 2005 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hört sich ja Plausibel an...
was soll ich denn bitteschön machen wenn ich 20 Türen habe?????

hab schon ne Idee Very Happy :
Also einen Hilfe cube erstellen. Der macht x1 (entityX(cube)) etc..
Muss nur den Bezugspunkt richtig einsteleln.
versteht ihr..so das die Ecken des Cubes eine "Area", wie du sie nennst schaffen... müsste doch zu schaffen sein, oder?!?

Ayman

BeitragDo, März 10, 2005 2:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

ich würde das nur mit EntityDistance machen. Das sollte am schnellsten laufen. Wenn Du Dir dafür Collisions definierst, dann resultiert das intern in mehr als eine Distance-Berechnung - es sei denn Du nimmst Kugel-Kugel-Kollisionen.

Dein Schalter ist ein Entity (Quad) und dein Spieler (Mesh) auch.

Experimentiere mit der Enfernung im Spiel - lauf mit dem Spieler ein paar mal drüber und gib die Entfernung zwischen Schalter und Spieler auf dem Bildschirm aus. Dann definiert Du eine Obergrenze im Spiel und checkst, ob diese Entfernung unterschritten wird. Dann steht der Spieler auf dem Schalter.

Wenn Du es geschickt machen willst und viele solche Schalter im Level hast, dann solltest Du deinen Level in verschiedene Areas unterteilen und checkst dann jeweils nur die Schalter, die in der Area liegen, in der der Spieler gerade unterwegs ist.

Grüße
Ayman
uomini cercano uomini
 

ke^kx

BeitragDo, März 10, 2005 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntes auch Gebiete einfach mit x- und y-Positionen abfragen.

Wenn du das so nicht verstehst einfach fragen^^

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

erforderlich

BeitragDo, März 10, 2005 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
@Ayman
gute Idee...
Kann ich nich einen Cube erstellen, der auch die Höhe hat die ich will, dann muss ich keine Y-Area erstellen...

@Jiriki
Jaaa..aber ich will hinterher komplexe Level haben...(will nich immer wieder die Bereiche neu definieren..)

ich habe das bisher so gemacht:
Nen Cube aufm Boden..
Code: [AUSKLAPPEN]

bereich_X_min = (entityX(cube))-(meshwidth(cube)/2)
bereich_X_max = (entityX(cube))+(meshwidth(cube)/2)



Dann schaut der ob ich drin bin...habe aber den cube in der selben datei wie den rest der map..der vezieht das alles..(keine guten mittelpunkt der Tastfläche...)

Vielleicht eine Map nur für die Tastflächen???
nochwas:
Mir ist etwas aufgefallen, cih weis aber nich ob das richtig ist. Also Bei meinem Objekt, wenn ich z.B. EntityX ausgeben lasse, gibt, der mir -1.056 oder so aus.
Verglichen mit dem im Blitz erstellten ich (entityX=300) kann da was ja nicht stimmen.
Ich glaube, vermute, das die Werte die ermessen sind, (werden ja von einem Child gemessen.), die Positionen aus des Kompletten *.B3D Objekt errechnen..irgendwie..so...(wie ich oben schon beschrieben habe)

Der Code, den ich oben gepostet habe, ist absolut Korrekt...(denke ich)
Was kann da nicht stimmen? Wie macht ihr das mit solchen Events?
Kann man das mit dem Drehpunkt ändern??
 

getlose

BeitragDo, März 10, 2005 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
hex's vorschlag war doch eigentlich schon gut.
mit collision würde ich das nicht machen.

Code: [AUSKLAPPEN]
If EntityX(mesh)>1 And EntityX(mesh)<2 Then
   If EntityY(mesh)>1 And EntityY(mesh)<2 Then
      If EntityZ(mesh)>1 And EntityZ(mesh)<2 Then
         ;es werde licht
      EndIf
   EndIf
EndIf


in diesem fall wird erst eine aktion ausgeführt wenn die
mesh-position x,y und z großer als 1 und kleiner als 2 ist.
könntest diese positionen in nem type ablegen das du dann
auch gleich mit den lichtern verknüpfen kannst.
 

erforderlich

BeitragFr, März 11, 2005 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
@getlose:
Tut mir leid das zu sagen, aber ich befürchte doch fast, du hast meinen letzten Beitrag gar nicht gelesen...

Ich habe es ja vor zu machen, aber ich finde die koordinaten nicht raus..
(siehe oben)
 

getlose

BeitragSa, März 12, 2005 6:19
Antworten mit Zitat
Benutzer-Profile anzeigen
doch, hab deinen letzten beitrag gelesen, ich
befürchte du hast mein posting nur nicht ganz verstanden :)

in deinem code oben legst du den bereich, den du
prüfen willst, anhand eines cubes fest.

in meinem code frage ich die spieler-position (mesh)
ab und vergleiche sie mit werten die aus keinem
cube oder sonstwas errechnet werden. (in deinem fall meshwidth(cube) usw. )
das ist einfacher&schneller weil : kein unnützes mesh, keine meshwidth,height,depth-abfragen.
 

erforderlich

BeitragSa, März 12, 2005 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber:
Angenommen es geht hier im eine Tür, die nur aufgehen soll, wenn man auf dem Sensor steht.
Dann kann man sich auch keine zu überprüfenden x,y,z positionen aus dem hintern ziehen (soll ja flexibel sein)...
Ich will hingehen, mehrere Häuschen (in einer *.b3d datei) wild herum setzten, un der soll immer wissen das die Tür aufgehen soll (können ja auch ersma alle augehen [momentan nich das Problem])
Deiner Meinung nach, sollte ich gucken, wo die zu überprüfenden x-y-z Koordinatenpaare sinn..was wenn ich jetzt ganz kess noch ein Haus ganz wild in den Raum speicher, diese Datei dann zu *.b3d konvertiere??
Dann muss ich gucken: Wo muss die Tür jetzt aufgehen? (2Std. später = ahhhh X1=505 X2=570 Y1=2645, usw.)
Deswegen wollte ich die Position eines Childs in der Blitz3D Welt rausfinden, nicht Objekt intern...
Damit wäre ich sehr flexibel...
Ich hoffe man konnte was verstehen, hab schnell geschrieben Wink

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group