Programmiersprache schneller als Java gesucht

martinibook

martinibook

Aktives Mitglied
Thread Starter
Dabei seit
20.08.2005
Beiträge
8.730
Reaktionspunkte
350
Hallo,

Ich habe jetzt sein ungefaehr 1,5 Jahren Javaprogramme geschrieben, vor allem Programme, die ein Bild ausgeben, Spiele wenn man so moechte. Allerdings merke ich auf einem 1,2 gHz iBook, dass ich bei wirklich einfachen Dingen nur so 20 Bilder pro Sekunde hinbekomme, obwohl ich nur einige einfache 2D-Objekte darstelle.

Ich weiss, dass es schneller geht, denn schliesslich gibt es 3D Spiele, die laufen, fuer den Rechner. Ich wuerde gerne Programme schreiben, die 2D oder vielleicht sogar 3D Bilder ausgeben, schneller als Java laufen. Allerdings kann ich kein Geld fuer eine IDE ausgeben. Objektorientierung waere auch schoen.

Gibt es da vielleicht etwas fuer mich?
 
+++ sinnloses fullquoting entfernt - http://learn.to/quote +++

C, C++,d,C#, pascal,phyton, perl, assembler, lisp, opal,brainfuck, whitespace, fortran usw.
Such dir was aus...
 
Zuletzt bearbeitet von einem Moderator:
oehm ... 3d spiele benutzen auch die graka ... also muesstest du opengl oder aehnliches lernen :p
 
Du äußerst Dich nicht zu Art und Umfang Deines Programms und auch nicht zu den verwendeten Algorithmen. Es ist gut möglich, dass durch eine effizientere Implementierung deutlich mehr rauszuholen wäre, als durch Wechsel der Programmiersprache, das aber nur als Denkanstoß - da ich über Deine Applikation nichts weiss, ist das reine Spekulation.
 
@magheinz
Einfach nur alle Programmiersprachen aufzuzählen, die Dir spontan einfallen, bringt gar nichts. Beispielsweise dürfte C# für Macprogramme ebenso wenig brauchbar sein, wie reine Interpretersprachen wie Perl und Python. Ähnliches gilt für die meisten anderen von Dir aufgezählten Sprachen. Dein Beitrag ist reiner Spam.
 
Zuletzt bearbeitet:
@eml2306: Ich habe zum Beispiel ein einfaches Spiel programmiert, in dem man mit einer Figur durch eine Landschaft laeuft. Die Karte ist aus 40*40 pngs zusammengesetzt, die Karte ist ein char[][] dargestellt, W fuer Waende, B fuer Boden usw.

Ich habe einen Timer, der alle 40ms das Fenster neu Zeichnet, das Fenster enthaelt nur ein JPanel, in dem ich die paintComponent ueberschrieben habe. Dann werden ueber das Array die Kacheln gezeichnet und die Figur in die Mitte gesetzt. Das ganze laeuft Vollbild recht langsam.

Gibt es vielleicht einen besseren Ansatz?
 
Objektorientierte Sprachen: z.B. C++, Objective-C
IDE (kostenlos): Xcode von Apple (auf der OSX-DVD)
Graphik-Programmierung: Infos und Beispielkode
 
@magheinz
Einfach nur alle Programmiersprachen aufzuzählen, die Dir spontan einfallen, bringt gar nichts. Beispielsweise dürfte C# für Macprogramme ebenso wenig brauchbar sein, wie reine Interpretersprachen wie Perl und Python. Ähnliches gilt für die meisten anderen von Dir aufgezählten Sprachen. Dein Beitrag ist reiner Spam.
Was denkst du denn sind "schnellere" Sprachen als java?
Wer so unspezifisch anfragt darf sich über allgemeine Antworten nicht wundern.

C# dürfte dank mono auch unter OSX laufen. Perl,Python usw sowieso. Ob da Schnittstellen zu irgendwas OSX-Spezifischem angeboten werden weiss ich nicht, jedoch hat der OP auch nicht danach gefragt. er möchte "gerne Programme schreiben, die 2D oder vielleicht sogar 3D Bilder ausgeben". Das kann jede der von mir genannten Sprachen. Dank X-Server auch in hübsch bunt.
 
Ach komm! Jetzt mach Dich doch nicht ganz lächerlich.
Du weißt genau, dass Dein Beitrag weder hilfreich war noch sein sollte.
 
Hallo,

Ich habe jetzt sein ungefaehr 1,5 Jahren Javaprogramme geschrieben, vor allem Programme, die ein Bild ausgeben, Spiele wenn man so moechte.
Gibt es da vielleicht etwas fuer mich?

C++ und Obj-C wurden schon genannt. C++ dürfte näher an Java dran sein. Das schreib ich aber eher aus Unwissenheit, da ich bisher nur Beispielcode von Obj-C gesehen hab.

Vielleicht solltest du dich aber mal mit Optimierung auseinandersetzen. Auch mit C++ kann man sehr langsame Programme erzeugen. Zusätzlich gibt es für Java auch native Bibliotheken (e.g. SWT). Die benutzen das JNI, um die GUI nicht durch die VM rendern lassen zu müssen.

Aber halt, wir sind hier bei Apple und die Firma hat eine schöne Dokumentation für Obj-C und ihre Bibliotheken. Viel Spass beim Lesen...

Bei dem Thema: Hast du es schon mit Multithreading probiert?
 
Zuletzt bearbeitet:
bei mehr als 20fps sollte man eine native Anwendung implementieren, dazu bietet sich auf dem Mac vordringlich Objective-C mit den Core-Grafiklfunktionen und Cocoa an.
 
Allerdings merke ich auf einem 1,2 gHz iBook, dass ich bei wirklich einfachen Dingen nur so 20 Bilder pro Sekunde hinbekomme
Ich habe einen Timer, der alle 40ms das Fenster neu Zeichnet

Also eine Beobachtung nur so am Rande: Wenn du alle 40ms ein Bild "ausgeben" lässt, solltest du dich nicht wundern, wenn du nicht viel mehr als 20 Bilder pro Sekunde bekommst, da 1000/40 = 25.

Dies löst dein Problem zwar nicht, liefert aber vielleicht wenigstens eine Erklärung.
Und wie bereits erwähnt wurde, solltest du dir für Mac-Anwendungen wirklich einmal die Core-Funktionen anschauen, wobei ich selbst damit auch noch nicht gearbeitet habe.
 
C# dürfte dank mono auch unter OSX laufen. Perl,Python usw sowieso.
Die Implementation von mono unter OS-X ist grottenschlecht und höchstens für ein wenig ASP-Net geeignet. ;)
Was hat ein X-Server bitte schön mit schneller Spielgrafik zu tun. :nono:
 
Ich sehe nicht ganz das Problem mit Java.
Sehr viele Spiele für Handys sind mit Java Programmiert. Und diese haben definitiv einen schlechteren Prozessor als der ein 1,2 Ghz PPC. Du scheinst schlichtweg nicht gut zu programmieren.

Du musst dich mehr mit den Grafiklibs von Java befassen. Für dein simples Problem würde ich etwas in der Richtung vorschlagen:
Du nimmst ein JLayeredPane. Dann ein JLabel von dem du erbst und eine neue Klasse machst in der du das Aussehen deines bewegenden Objekts angibts. Dann "lässt" du das JLabel auf der Layerdpane zeichnen. Wenn es einen Positionswechsel gibt änderst du einfach mit .setLocation (oder so) die Position des dinges.
 
Japp, setz dich mal mit dem Eventmodell von Java auseinander. Das hilft bestimmt weiter.
 
Es gibt ganz gute Bücher für 3D Spiele in Java, zwischen 50 und 100 Euro. Mir fällt spontan ein: Killer Game Programming in Java.
Edit: Das hier war auch richtig nett: Developing Games in Java von David Brackeen
 
Zuletzt bearbeitet:
Außerdem wäre mal die Frage wichtig, ob die Plattformunabhängigkeit von Java eine Rolle spielt - denn falls ja, ist dem Threadersteller mit Obj-C und Core libs nicht wirklich geholfen...

Aber ansonsten kann ich mich nur anschließen: dein Problem ist nicht die Sprache, sondern dein Programmierstil, denn ein so einfaches Spiel wie du es beschreibst, kann man definitiv auch in Java in einer gescheiten Geschwindigkeiten programmieren.
 
Auch wenn ich wahrlich kein Fan von Java bin...

Ich würde dir erst mal keinen Wechsel der Programmiersprache empfehlen. Deine Spiele sind vermutlich wegen der Oberfläche (Swing) so langsam. Nimm stattdessen OpenGL. Das kann man auch in Java einsetzen (z.B. mit JOGL). Die Geschwindigkeit dürfte für deine Zwecke dann völlig ausreichend sein. Und es ist weit weniger stressig als eine neue Oberfläche UND eine neue Programmiersprache zu lernen. (Für die Zukunft empfehle ich natürlich auch dort mal über den Tellerrand zu schauen :))
 
Zuletzt bearbeitet:
@eml2306: Ich habe zum Beispiel ein einfaches Spiel programmiert, in dem man mit einer Figur durch eine Landschaft laeuft. Die Karte ist aus 40*40 pngs zusammengesetzt, die Karte ist ein char[][] dargestellt, W fuer Waende, B fuer Boden usw.

Ich habe einen Timer, der alle 40ms das Fenster neu Zeichnet, das Fenster enthaelt nur ein JPanel, in dem ich die paintComponent ueberschrieben habe. Dann werden ueber das Array die Kacheln gezeichnet und die Figur in die Mitte gesetzt. Das ganze laeuft Vollbild recht langsam.

Gibt es vielleicht einen besseren Ansatz?

So aus dem Bauch raus sind die Swing-Komponenten nicht die erste Wahl, wenn Du ein performantes Spiel implementieren willst. Als Ausgangspunkt würde ich es mal mit dem versuchen, was Java in Sachen Sprites anzubieten hast, vielleicht stellt sich dann schon Besserung ein. Ansonsten: Z.B. die Golden T Game Engine beweist, dass es schon etwas schneller geht, ist auch frei erhältlich, aber leider kein OpenSource, man kann also nicht mal eben nachsehen, wie die das so angehen.
 
(Für die Zukunft empfehle ich natürlich auch dort mal über den Tellerrand zu schauen :))

Ich komme mehr oder weniger über wenig C nach PHP und von da nach Java. Ich habe wahrscheinlich einfach diese "Ich generiere ein Bild und zeige es an"-Denkweise, die anscheinend nicht der richtige Ansatz ist. Es ist wahrscheinlich nicht die Sprache sondern der Ansatz. Ich scheine eben alles in der VM zu machen und benutze gar nicht die Möglichkeiten die ich könnte.

Wegen der Plattform:
Ich finde Java recht nett, da es eben alles Objektorientiert ist. Außerdem ist es mehr oder weniger aus dem Boden gestampft, man hat nicht Dinge von älteren Versionen. Ich habe viele Freunde, die Windows benutzen, in der Schule haben wir keinen einzigen Mac, wenn ich also jemandem zeigen möchte, was ich gemacht habe, geht es nur auf einem PC.

Danke für die Antworten, ich werde mich mal ein wenig reinlesen.
 
Zurück
Oben Unten