Pure Basic und seine Entwicklung im 2D Spiele Bereich

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Job
Beiträge: 13
Registriert: 08.05.2009 10:26

Beitrag von Job »

Na dann lasse ich mich mal herab :lol:

Gehen wir die Sache chronologisch an:

@cxAlex
Wozu überhaupt 2D/3D Befehle, man kann sich doch jede Graphikbibliothek per DLL in PB einbinden.
Du hast den Sarkasmus dahinter nicht verstanden, ich habe das geschrieben, weil ich zur Antwort bekam, es selbst zu programmieren und wenn es danach geht, ist dieses Board überflüssig, denn diese Antwort könnte man auf alle hier gestellten Fragen geben.
Ich denke man hat es dir schon gesagt, PB ist kein BAUKASTEN !!!
Das wurmt einen ernsthaften Programmierer anscheinend sehr, so nach der Devise, ich programmiere ernsthaft und nicht mit einem ordinären Baukasten. Da sollte eigentlich keiner mit Delphi oder Visual Basic ein Anwender Programm schreiben :mrgreen:

Wer sich der Zukunft verschließt, wird in der Vergangenheit untergehen.

@hjbremer
Ein ganz besonders geistreicher Spaßvogel. Also ich habe für mein PB mehr als 99 Cent bezahlt, keine Ahnung, wo Du es herunter geladen hast und die vollmundige Werbung von PB stammt ebenfalls nicht aus meiner Feder(gleichermaßen für Spiele und Anwendungen geeignet).

@DarkDragon
Vom Standard ausgehend magst Du recht haben, allerdings sieht die Wirklichkeit im Netz anders aus und was das einbinden anbelangt. Wenn es so einfach ist, warum öffnet Fred diesen Weg nicht mittels Befehle und Anleitung auch für Anfänger? Die zweite Frage, die sich stellt, ist natürlich soll PB dann nur noch als Schnittstelle zu C Bibliotheken herhalten?
Wo bliebe dann die Inovation und die Idee, die hinter diesem ehrgeizigen Solo Projekt steckt.

@Kaeru Gaman
Schön, daß Du Dich wenigstens im ersten Teil ernshaft mit meinem Thread beschäftigt hast. Meine Beispiele wurden natürlich sehr überzeichnet dargestellt(da ich ja im Gegensatz zu Euch ein wirklicher Anfänger bin) aber über deren Umsetzung und Plausibilität, hat sich auch der Entwickler den Kopf zu zerbrechen.
Und zur Impementierung von OGRE gebe ich Dir recht, doch wie gesagt, ich hab die Werbung zu PB nicht gemacht und es werden auch weiterhin Menschen ihr Geld für PB ausgeben, weil sie glauben, zu bekommen, was beworben wird(bekommen sie ja auch im Prinzip, aber wenn dann jegliche Neuerung und Unterstützung seit 4 Jahren fehlt, wird es unglaubhaft.
Zu Deinem zweiten Beitrag kann ich nur folgendes sagen:

1) auf was soll ich antworten, es wurde ja eindeutig die Aussage getätigt, ich soll mir das selbst programmieren.
2) wenn ich dort das geschrieben hätte, was ich hier geschrieben habe, dann wäre von Dir sicherlich "offtopic" gekommen, was mich unmittelbar zu Punkt 3 führt.
3) Freunde werden wir keine mehr :mrgreen:

PS.: hab eben im Mülleimer nachgesehen, an Deiner Stelle würde ich bei Deutsch bleiben, französisch liegt Dir nicht :wink:

@ZeHa
Ein dickes Plus, mein Sarkasmus wurde richtig erkannt und es wurde emotionslos geantwortet.

@Thorium
Ebenfalls ein dickes Plus, sehr informative Kritik, wenn mich Deine Antworten auch dazu verleiten zu glauben, daß eine solche Einstellung keine Veränderungen bringt(aber vielleicht wollen das einige hier).

@AND51
Danke, Du bringst es auf den Punkt.

@Delle
Das versuche ich mit diesem Beitrag zu forcieren :wink:

@All
Es scheint ja doch so, als hätte ich einen wunden Punkt getroffen, wenn ich mir die zahlreichen Antworten in so kurzer Zeit ansehe. Denken wir also positiv und leben in der Hoffnung, daß sich Fred oder sonstwer auch wieder mal der Spieleprogrammierer erinnert, die sich PB ebenfalls in großer Erwartung(bez. Support und Weiterentwicklung) gekauft haben.

*
Wer keine Fragen mehr hat, hat auch das Denken aufgegeben.
Und wer keine Antworten erhält, sollte sich mehr Mühe bei der Fragestellung geben.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> aber über deren Umsetzung und Plausibilität, hat sich auch der Entwickler den Kopf zu zerbrechen.

das versuche ich ja die ganze zeit dir zu sagen...
eine allgemeingültige 2D lib wäre ziemlich vergebene Liebesmüh.
der Aufwand steht in keinem Verhältnis zum Nutzen.


> ich habe das geschrieben, weil ich zur Antwort bekam, es selbst zu programmieren

ganz genau das solltest du tun.

das was du erfragst ist größtenteils sehr spezifisch, und sollte viel eher genau auf das
jeweilige Problem zugeschnitten sein, als allgemeinverwendbar erstellt werden.
es gibt hundertelei Hilfen im Forum, die sich mit 2D-Spielen befassen.
Da kannst du dich einarbeiten, und dir deine Routinen schreiben.

Wenn dir das zu umständlich ist, ist PB nunmal nicht deine Entwicklungsumgebung für Spiele,
besorg dir z.b. den Yoyo-Gamemaker, der ist so speziell für solche Fälle.

Es gibt noch mehr Kollegen, die PB nur für Anwendungen verwenden, und ihre Games mit nem Gamemaker machen.


> Freunde werden wir keine mehr

... macht nix
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Job
Beiträge: 13
Registriert: 08.05.2009 10:26

Beitrag von Job »

Also ich mußte jetzt echt laut lachen, ich hatte so in Erinnerung, daß jemand schrieb, ich soll doch die Suche bemühen und würde unzählige Treffer angezeigt bekommen.
Habe das eigentlich öfter getan und war mit nicht bewußt, daß da was sinnvolles rausgekommen wäre, aber man(n) überprüft ja gerne solche Angaben.
Die Suche mit "timer in spielen" ergab 13 Treffer(obwohl ich nach allen Wörtern gesucht habe). Zwei davon waren meine eigenen und weitere 10 nicht wirklich produktiv, ABER, dann entdeckte ich einen Thread aus dem Jahre !2004!, der die Timer Lib von Danilo beinhaltete und weiters auf die Ungenauigkeit der "ElapsedMilliseconds()" Funktion aus PB hingewiesen wurde.
Was soll ich sagen, der "Fehler" ist immer noch in PB präsent:

Code: Alles auswählen

; *** TIMER - ROUTINE von DANILO 2004 ***

Structure Time_Field
  tGT.l
  EM.l
  GTC.l
EndStructure

Dim TF.Time_Field(20)

Procedure InitGameTimer() 
  Shared _GT_DevCaps.TIMECAPS 
  SetPriorityClass_(GetCurrentProcess_(),#HIGH_PRIORITY_CLASS) 
  timeGetDevCaps_(_GT_DevCaps,SizeOf(TIMECAPS)) 
  timeBeginPeriod_(_GT_DevCaps\wPeriodMin) 
EndProcedure 

Procedure StopGameTimer() 
  Shared _GT_DevCaps.TIMECAPS 
  timeEndPeriod_(_GT_DevCaps\wPeriodMin) 
EndProcedure 

InitGameTimer() 

For i = 0 To 20
  TF(i)\tGT = timeGetTime_() 
  TF(i)\EM  = ElapsedMilliseconds() 
  TF(i)\GTC = GetTickCount_()
Delay(5)
Next

For i = 1 To 20
  Debug "Loop " + Str(i)
  Debug TF(i)\tGT - TF(i-1)\tGT
  Debug TF(i)\EM  - TF(i-1)\EM
  Debug TF(i)\GTC - TF(i-1)\GTC
Next
  
StopGameTimer() 
Wer jetzt noch behauptet, Spieler und Anwender werden in PB gleichermaßen behandelt, ist zu 90% ein Anwender Programmierer :lol:

Die vollmundige Werbung für beide Bereiche sollte wohl neu überdacht werden und alle die Spiele programmieren wollen, sollten sich wirklich einen Game-Maker kaufen.
Und kommt mir jetzt nicht wieder mit "dann nimm doch API", denn dann plädiere ich dafür, daß überhaupt kein PB Update mehr kommt, denn mit API und Inline Assembler läßt sich ja wohl alles machen und dann sind die Anwender von PB endlich ein elitärer kleiner Club, wo sich nur noch Profis tummeln.

@edit: Tabelle nachgereicht

Code: Alles auswählen

tGT = timeGetTime_()  /  EM = ElapsedMilliseconds()  /  GTC = GetTickCount_()


Loops    tGT    EM      GTC

Loop 1   15     15      15
Loop 2   16     16      16
Loop 3    6     16      16
Loop 4    5      0       0
Loop 5    6      0       0
Loop 6    6     15      15
Loop 7    6      0       0
Loop 8    6     16      16
Loop 9    6      0       0
Loop 10   6      0       0
Loop 11   5     16      16
Loop 12   6      0       0
Loop 13   6      0       0
Loop 14   6     15      15
Loop 15   6      0       0
Loop 16   6     16      16
Loop 17   6      0       0
Loop 18   6      0       0
Loop 19   5     15      15
Loop 20   6      0       0
*
Zuletzt geändert von Job am 17.05.2009 13:19, insgesamt 4-mal geändert.
Wer keine Fragen mehr hat, hat auch das Denken aufgegeben.
Und wer keine Antworten erhält, sollte sich mehr Mühe bei der Fragestellung geben.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Also ich hab anfangs mit PB auch nur Spiele programmiert bzw. hatte das vor :)

Dann bin ich aber an simplen Dingen wie Intro/Spielscreen ein/ausfaden gescheitert und im Forum konnte man auch nicht wirklich weiterhelfen. Klar hab ich mittlerweile eine Lösung dafür, aber sowas sollte als Befehl oder in einer Userlib eben einfach vorhanden sein.

In Blitz Basic geht das ja schließlich auch mit weniger Code.

In bin von Blitz zu Pure gewechselt, weil ich da mehr Einfluss auf die .exe hatte und der Code kleiner war etc. und man eben "richtige" Anwendungen programmieren konnte. Massig Befehle dafür sind ja da, ansonsten gibt's ja noch die API.

Klar ist Pure nicht der reine GameMaker aber etwas mehr Features in dem Bezug wären schon nicht schlecht.

Aber 2D wird ja sowieso stiefmütterlich behandelt und wenn dann nur irgendwelche 3D-Engines mit eingebaut, die mich z.B. aber überhaupt nicht interessieren.

Ich wäre sogar bereit für entsprechende Userlibs einen Obulus zu bezahlen... ich mein hier im Forum haben doch 2 Leute schon mal solche Oldskool-Demo-Libs veröffentlicht und da waren z.B. Fades usw. drin, die man perfekt für ein Spiel auch verwenden könnte.

Vielleicht nimmt ja mal jemand diesen Thread als Anregung eine Game-Userlib zu machen?! :)
PB 6.21 | Win 11
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Gibt doch ein GameMaker in PB sogar OpenSource
Da kann man sich bestimmt was abgucken ....

http://www.purebasic.fr/german/viewtopic.php?t=19109

//EDIT leider is die Seite nicht mehr Verfügbar :cry:
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Meiner Auffassung nach ist der Unterschied zwischen 2D- und 3D-Spielen die graphische Darstellung. Und hier geht es doch um APIs nicht? Z.B. die PureBasic Sprite&Screen Libraries.

Die Richtung in die der technologische Fortschritt geht ist nicht zu übersehen, nur noch 3D APIs. Selbst für 2D Darstellungen (was man mit SDL durch direkten Zugriff auf den Framebuffer erledigen könnte) werden mittlerweile OpenGL und Direct3D benutzt, wegen der Hardwarebeschleunigung und Mehrzahl an Möglichkeiten.

Somit finde ich es blöd über Fortschritte von PureBasic, oder allgemeiner dieser Technik mit dem Blitting, zu reden, wenn sie eigentlich gänzlich veraltet und an ihre Grenzen gestoßen ist, und nur durch einen kompletten Ersatz erneuert werden kann.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Job hat geschrieben:@DarkDragon
Vom Standard ausgehend magst Du recht haben, allerdings sieht die Wirklichkeit im Netz anders aus und was das einbinden anbelangt. Wenn es so einfach ist, warum öffnet Fred diesen Weg nicht mittels Befehle und Anleitung auch für Anfänger? Die zweite Frage, die sich stellt, ist natürlich soll PB dann nur noch als Schnittstelle zu C Bibliotheken herhalten?
Wo bliebe dann die Inovation und die Idee, die hinter diesem ehrgeizigen Solo Projekt steckt.
Das einbinden von Bibliotheken in C++ ist meiner Meinung nach nicht so für Anfänger geeignet als in PureBasic. In PureBasic machst du halt dein Import/ImportC in den Code rein, definierst dort die Funktionen und fertig ist es. :freak: Bei C++ muss man auf Compilerversionen und IDEs achten und jeder Anfänger stolpert irgendwann über einen Linker Error und weiß damit nichts anzufangen, fragt dann in 100 Foren nach bis er endlich die Antwort bekommt, er müsse die richtige Bibliothek suchen und dann in das Feld unter Projekt > Hose > Schuhe > Kuh > Elefant > ... > Submenü 1120 gleich rechts eintragen. Und für Anfänger ist eine Konsole noch weniger geeignet, nicht umsonst ist Makefile/Batch/Bash eine eigene Studie.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Job hat geschrieben: Was soll ich sagen, der "Fehler" ist immer noch in PB präsent
Das ist kein Fehler von PB. Das liegt am OS. PB nutzt einfach nur GetTickCount. Das Problem hast du in jeder Sprache. Wenn du einen genauen Timer haben willst, musst die den Performance Counter verwenden: Suche nach QueryPerformanceCounter
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

danke, Thorium.
ich finde es beängstigend, dass da vier postings kamen, ohne das richtig zu stellen.

;--------------------------------------------
@Job

ich schlage vor, mal konkretere Fragen zu stellen, dann kann man auch konkreter Antworten, anstatt nur auf die Boardsuche zu verweisen.

beachte bitte, dass ich nur schrieb
> es gibt hundertelei Hilfen im Forum, die sich mit 2D-Spielen befassen.
> Da kannst du dich einarbeiten, und dir deine Routinen schreiben.
und nichts von Boardsuche.

irgentjemand schrieb mal
> wer keine Antworten erhält, sollte sich mehr Mühe bei der Fragestellung geben.
hm... wer war das noch gleich?

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

also, da hätten wir zum Beispiel

Frameunabhängig programmieren von X0r
http://www.purebasic.fr/german/viewtopic.php?t=12421

EasyTimer von cxAlex
http://www.purebasic.fr/german/viewtopic.php?t=20006

HighResTimer als PureBasic Include von ts-Soft
http://www.purebasic.fr/german/viewtopic.php?t=9938

und auch
Billiges Game-Timing mit nativen PB-Mitteln von mir
http://www.purebasic.fr/german/viewtopic.php?t=17400

hier wird auch noch mal auf das TimeSlice-Problem, was die Ungenauigkeiten verursacht, eingegangen.

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

ich schlage auch mal vor, sich dieses posting anzusehen:
http://www.purebasic.fr/german/viewtopi ... 634#116634
und dieses:
http://www.purebasic.fr/german/viewtopi ... 689#116689

da sieht man deutlich, dass die eigenliche Darstellung einer Tilemap nur FÜNF Codezeilen einnimmt,
der Check wo die Maus ist ZWEI, und die Manipulation der Map zum Anzeigend er Maus ebenfalls ZWEI.

diese Handvoll Befehle integriert man besser in den Gesamtablauf, als sie in eine Lib auszulagern.
gewisse Funktionen laufen besser innerhalb der Darstellungsschleifen ab,
da ist es äußerst kontraduktiv, das als einen Befehl auslagern zu wollen.

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

zu Sprite-Animationen gibt es auch noch von mir einen Code:
http://www.purebasic.fr/german/viewtopic.php?t=2218

da kann man auch sehr schön sehen, wie viel Aufwand man treiben muss,
um es halbwegs allgemeingültig zu halten, und wieviel man weglassen könnte,
wenn man es für einen speziellen Fall implementieren will.

.... dass der Code im Grunde veraltet ist, weil ich damals nicht mit dynamischen SpriteIDs gearbeitet hab, ist ein anderes Problem ...

wenn du's etwas moderner magst, schau mal hier:
http://www.purebasic.fr/english/viewtop ... 375#284375

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

achja, und für Kollisionen gibts auch noch ein paar Kniffe
http://www.purebasic.fr/german/viewtopic.php?t=9093

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

also, wer so etwas lernen will, kann gerne Fragen stellen, und ausprobieren und bekommt im konkreten Fall geholfen.
dafür ist das Forum da.

.... und natürlich hilft es auch, sich von sprüchen wie
> irgendwie programmierst Du so umständlich, ich denke nicht, daß Du Dir das richtige Hobby ausgesucht hast
nicht ins Bockshorn jagen zu lassen.

dass heißt nicht, dass man belehrungsresistent sein soll - man soll sich nur nicht so leicht entmutigen lassen.

von dem spruch kann man
> irgendwie programmierst Du so umständlich
hören, und drauf reagieren, fragen warum das umständlich genannt wird und was man besser machen kann.

und
> ich denke nicht, daß Du Dir das richtige Hobby ausgesucht hast
darüber hört man einfach weg, das hat niemand zu entscheiden außer man selber.

.... und mal ehrlich, ich hasse fertige Libs...
um eine fertige Lib drumrum etwas für Kollisionen zu programmieren,
das MUSS doch zwangsweise umständlich aussehen.
davon würde ich von vorne herein die finger lassen...
igittt... dreimal schwarzer kater...
Job
Beiträge: 13
Registriert: 08.05.2009 10:26

Beitrag von Job »

@Kaeru Gaman

Danke für die vielen Beispiele und Ermutigung :)
Hab mir mal alle rauskopiert und werde sie mir mal einzeln durchsehen, bei Fragen wende ich mich vertrauensvoll an Dich.


@All
Bez. des "Fehlers" bei "ElapsedMilliseconds()", ich habe deshalb das Wort Fehler extra in Anführungszeichen gesetzt, wobei ich etwas enttäuscht bin, daß es damit erledigt ist.
Denn wenn es für einen scheinbaren Fehler in einer API Funktion eine Lösung gibt, warum wird dann diese nicht verwendet?

Gute Programmierer versuchen doch ständig ihre codes zu verbessern(wenn es sich um ein lieb gewonnenes Projekt handelt).

Weiters gebe ich zu bedenken, daß wir in jeglicher Hinsicht eine Retro Welle erleben und auch namhafte Spielehersteller bringen wieder 2D Spiele auf den Markt(meine Liebe dazu ist nie erloschen und so lange es keine allzeit vernünftige Kameraposition in 3D Spielen geben wird, werde ich auch bei 2D bleiben).
Also ist der Ruf nach neuen Befehlen für die Erstellung von 2D Spielen nicht so einfach von der Hand zu weisen. Eine Durststrecke von 4 Jahren ohne sinnvolle Neuerungen finde ich auch lange genug(was wohl Anwender sagen würden, wenn es seit 4 Jahren keine neuen Befehle für sie gegeben hätte? Vermutlich hätte man PB für tot erklärt :mrgreen: ).

Das perfekte Spiel für mich wäre ein 2D Spiel, das in 3D erstellt wurde(wegen der Schatten, Texturen, Playerbewegungen u.m.).

Wenn jemand Anregungen hat, wie und womit(vielleicht ein GameMaker) man so etwas verwirklichen kann, immer her damit.

*
Wer keine Fragen mehr hat, hat auch das Denken aufgegeben.
Und wer keine Antworten erhält, sollte sich mehr Mühe bei der Fragestellung geben.
Antworten