Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

30.12.2013, 09:28

Würde das nicht Schadsoftware Tür und Tor öffnen?
Wenn jemand ein Script für Dein Spiel schreibt, dann kann er auch eine neue EXE Datei belegen. Was da drin steht, weiß am Ende doch auch keiner. Mit fremden Codes sollte man *immer* vorsichtig sein, wenn die Quelle dubios und nicht vertrauenswürdig (jede fremde/unbekannte Quelle ist nicht vertrauenswürdig!) ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

LeBusch

Frischling

  • »LeBusch« ist der Autor dieses Themas

Beiträge: 81

Beruf: Student B.Sc. Informatik

  • Private Nachricht senden

12

30.12.2013, 12:12

Wenn jemand ein Script für Dein Spiel schreibt, dann kann er auch eine neue EXE Datei belegen. Was da drin steht, weiß am Ende doch auch keiner.
Das wäre aber schon eher "verdächtig", weil es eigentlich keine logische Erklärung gäbe, eine neue Exe mitzuliefern.

Aber im Grunde hat sich das Thema ja ohnehin schon erledigt. Jonathan Klein hatte ja bereits ein System beschrieben, was für meine Zwecke optimal wäre. Wenn ich jetzt im Hintergrund noch ein Boolean-Array hätte, was bspw. 50 Variablen vom Typ Boolean beinhaltet und dem Triggersystem mit Befehlen wie "IsBoolean x true/false" und "SetBoolean x true/false" Zugriff auf diese Variablen liefere, müsste das Ausgangsproblem ja eigentlich gelöst sein. Korrigiert mich bitte, wenn ich hier einen Denkfehler eingebaut haben sollte.

13

30.12.2013, 13:51

Habe ich das eigentlich richtig verstanden, dass es keine Anweisungen gibt, die immer ausgeführt werden, sondern alle Anweisungen von einer Fallunterscheidung abhängen?

Naja. Es hindert dich ja niemand daran, einen Bedingungstyp zu haben, der IMMER erfüllt ist.
Die Frage ist natürlich, wie man die Trigger am geschicktesten Abfragen sollte. Die einfachste Möglichkeit wäre es natürlich in jedem Frame sämtliche Bedingungen zu prüfen, und dann entsprechend Anweisungen auszuführen. Man könnte auch versuchen, das ganze Event-basiert zu lösen, indem man beispielsweise die Bedingung mit der Spielerposition immer genau dann prüft, wenn der Spieler sich bewegt hat. Die Idee dahinter wäre halt, die Abfragen effizienter zu gestalten. Ein Problem hätte man dann aber mit kombinierten Abfragen, weil diese ja nicht nur auf einem Ereignis beruhen.
Und man kann sich natürlich überlegen, wie einzelne Bedingungen implementiert werden. Bleiben wir mal bei dem "Spieler in Bereich" Beispiel. Du könntest jetzt entweder einen Zeiger auf dein Spielerobjekt speichern, und darüber die Position äußerst leicht abfragen. Aber Zeiger können nunmal ungültig werden, also musst du aufpassen, was du mit dem Spielerobjekt anstellst (wenn du z.B. ein neues erstellst, weil ein Level geladen wurde oder so). Du hast also einfach eine Abhängigkeit zwischen Trigger und Spielerobjekt, und die sind nie sonderlich schön.
Eine Alternative wäre es, jedesmal den SzenenManager (oder sonst eine Verwaltungsklasse) nach dem aktuellen Spielerobjekt zu fragen. Es kann sein, dass auch dieser keinen direkten Zugriff darauf hat und es erst raussuchen muss (beispielsweise aus einer Liste aller Objekte), was natürlich viel aufwändiger ist. Andererseits ist dieser Ansatz aber auch viel robuster, weil du im Endeffekt weniger Abhängigkeiten hast (und die Abhängigkeit zum einer eher globalen Klasse wie einen SzenenManager vermutlich weniger aufwändig ist).

Man hat also einfach viele Freiheiten, wie man es implementieren kann und es schadet nicht, sich vorher ein paar Gedanken darüber zu machen. An deiner Stelle würde ich das ganze aber erstmal so einfach wie möglich halten, selbst wenn du in jedem Frame ein Objekt aus einer Liste mit 1000 Elementen raussuchen musst, ist das im Endeffekt nicht wirklcih schlimm. Schlimm wird es, wenn du das 10.000 mal pro Frame machen musst. Baue also ein einfaches System und schaue, wo dessen Grenzen liegen, wenn das nicht reicht, kannst du danach immer noch optimieren.
Lieber dumm fragen, als dumm bleiben!

LeBusch

Frischling

  • »LeBusch« ist der Autor dieses Themas

Beiträge: 81

Beruf: Student B.Sc. Informatik

  • Private Nachricht senden

14

31.12.2013, 15:11

Okay, dann versuche ich mich mal daran. Das dürfte deutlich simpler werden als meine ursprünglichen Pläne. Vielen Dank! :)

LeBusch

Frischling

  • »LeBusch« ist der Autor dieses Themas

Beiträge: 81

Beruf: Student B.Sc. Informatik

  • Private Nachricht senden

15

24.01.2014, 21:25

Ich muss dir noch einmal danken, Jonathan! Unbewusst hat mir dein Vorschlag auch die Arbeit an hardgecodeten "Türen" bzw. "Levelverbindungen" abgenommen. Einfacher gehts wirklich nicht:

Der Spieler geht auf der einen Seite in den Höhleneingang, ...

Quellcode

1
2
3
4
5
6
7
8
9
10
if
f_PlayerX=2,0
f_PlayerY=4,0
i_PlayerDir=0

then
LockInput   true
ChangeMap   2
PlayerPos=16,0  16,0
MovePlayer  down

... kommt schließlich auf der anderen Seite an und bekommt die Kontrolle über seinen Charakter zurück:

Quellcode

1
2
3
4
5
6
7
if
f_PlayerX=16,0
f_PlayerY=17,0
b_InputLocked=true

then
LockInput   false

Dein Tipp war wahrlich Gold wert! :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LeBusch« (24.01.2014, 21:40)


Werbeanzeige