Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 19:16

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Mai 26, 2011 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich habe ja meine Multiplatform Engine/Framework die bisher schon einigermaßen viele Systeme unterstützt (MacOSX [ppc, i386, x64], Windows [i386, x64], Linux [i386, x64], iOS [ARM6, ARM7] und PlaystationPortable [Homebrew])

Die engine ist in C++ geschrieben und daher problemlos auf all die oben genannten Platformen portierbar.

Jetzt gibt es aber ja noch Android und Windows Phone 7.
Bei Android ist es zumindest seit v2.3 auch möglich nativen code zu nutzen, zwar immernoch mit Java JNI binding, aber immerhin.. die portierung der engine ist im prinzip auch fertig, mir mangelt es nur an einem Test-Device :)

Bei Windows Phone 7 schaut es allerdings schlecht aus, genau wie bei dem kostenlosen developer program der XBox360 kann man Programme nur via C#.Net schreiben, keinerlei unterstützung für Native Code.

Im grunde macht das natürlich auch absolut sinn, denn sowohl Google als auch Microsoft wissen ja nicht zwingend welche Architekturen in zukunft noch kommen werden und möchten verhindern das alte Programme nichtmehr laufen dann..

Apple ist da - wie immer - einfach knall hart und sagt "Was interessiert uns abwärtskompatibilität?!". Wenn eine neue Platform rauskommt auf der die alten Binarys nichtmehr laufen - pech.

Aber ich frage mich, wie machen große firmen es, das ihre Spiele auf allen Systemen laufen?
Schreiben die die engine und den gesamten Code einfach doppelt in verschiedenen sprachen, oder gibt es irgendeinen tollen trick den ich nicht kenne?


Und, wieso gibt es bei Android und Windows nicht einfach die möglichkeit für "Fat-Binarys" wie bei OSX/iOS?
Bei Apple werden einfach alle binarys für die verschiedenen architekturen in einer zusammen gefasst, so das am ende ein Binary da ist welches aber auf allen architekturen läuft. Bei Android und Windows bräuchte es dafür einzelne binarys.


Um es also nochmal auf den punkt zu bringen, wie schaffen es die Hersteller ihr Spiel (z.B. AngryBirds) für iOS, Android, Windows Phone und was weiß ich noch zu entwickeln?

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 26, 2011 17:00 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Mehrere Binaries in einem, um verschiedene APIs zu unterstützen, geht ja nicht. Geht auch beim Mac nicht. Die Multi-Binaries beim Mac verwenden ja jeweils die selbe API, laufen aber auf unterschiedlichen Prozessor-Architekturen (PowerPC, x86_64).

Die Architektur ist heute weniger das Problem. Die mobilen Geräte laufen fast alle mit ARM. Aber die APIs, das Framework drum herum ist komplett anders.

Wie es Spiele wie Angry Birds machen? Nun, gibt mehrere Optionen, die man vorher knallhart durchkalkuliert und dann als Firma die billigste nimmt. Die zwei gängigsten sind:
- Neu schreiben und fortan mehrere Code-Zweige pflegen
- Gegen eine gemeinsame (vorher selbst erstellte) API coden, die die Unterschiede wegabstrahiert. Mit einem entsprechenden Crosscompiler kompiliert man dann weiter zur richtigen Plattform

Das machen einige z.B. mit Android so. Einige Firmen bauen sich ein eigenes Framework in Java, wo die benötigten Funktionen drin sind und lassen das nach Java Bytecode kompilieren. Von da aus wird das dann nach ObjectiveC binaries, Android APKs (ist ja im Endeffekt kompiliertes Java) und die ganzen anderen Sachen übersetzt und die entsprechenden APIs und Bibliotheken der jeweiligen Zielplattform verwendet. Siehe hier: http://www.youtube.com/watch?v=TG-NIt2O5J8
Die gehen dort z.B. einen Umweg über XML, wenn ich das richtig in Erinnerung habe.

Das lohnt sich für große Projekte und Projekte, bei denen man von Anfang an mehrere Plattformen im Visier hat.

Hoffe, ich konnte damit ein wenig Licht ins Dunkel bringen :)
~ Frase

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 26, 2011 17:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Du hast mich glaube ich missverstanden.
Mir geht es nicht darum wie man für verschiedene APIs entwickelt, sondern darum wie man für verschiedene - nicht kompatible programmiersprachen entwickelt.

C++ geht nunmal auf Windows Phone 7 definitiv nicht, welche möglichkeit ausser die gesamte Engine (welche die APIs natürlich abstrahiert kapselt) in C#/XNA neu zu schreiben hat man denn?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 26, 2011 17:41 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Nun, die Zielplattform (Windows Phone 7) futtert nur etwas, was aussieht wie das, was C# ausspuckt.
Du musst es also schaffen, dass auf dem Phone etwas landet, was wie ein C#-Kompilat aussieht.
Das steckt hinter den ganzen Cross-Compilern.

In dem Youtube-Video wird ja Java und Android verwendet. Nicht C++ (native) und Android.
Android erwartet nach wie vor Java-Binaries. Dass das Java im Hintergrund aber nativen Code verwendet, interessiert Android nicht.

Genau so erwartet das Windows Phone 7 C#-Binaries. Möglicherweise kannst du aus C# heraus native Bibliotheken (deine Engine) verwenden (und natürlich die Bibliotheken von Windows Phone 7, die auch für native Anwendungen verfügbar sein müssen) - falls nicht, musst du deine Engine in den Bytecode von C# cross compilen.
Dem Smartphone ist es herzlich wurst, wer den Bytecode gebaut hat. Ob das jetzt der Compilter vom Visual Studio war oder sonstwer. Und diesen Umstand kann man sich zu Nutze machen und von C++-Kompilaten in C# Bytecode zu übersetzen.

Und ja, das ist natürlich verdammt eklig, wenn du als Ausgangssprache C++ genommen hast. Sprachen wie Java oder C# tun sich da viel leichter, weil Bytecode wesentlich einfacher auszuführen ist als Maschinencode. Da gibt es sehr komfortable Bibliotheken, um den Bytecode zu lesen und zu verändern und sonstwas damit zu machen.

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 26, 2011 17:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Ich bezweifle aber das es einen solchen CrossCompiler für C++ -> (Managed) C#.Net gibt...

Insofern in der theorie möglicherweise eine nette Idee, in der Praxis allerdings glaub ich (aktuell) nicht möglich.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 26, 2011 17:48 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Zumindest, wenn man C++ oder eine andere nativ kompilierende Sprache verwendet, ja. In der Praxis verwenden viele Firmen, die für mobile Geräte entwickeln, aber tatsächlich Java u.Ä., insofern ist dieser Trick durchaus praxisrelevant.

Du hast dann, so wie ich das sehe, keine andere Möglichkeit als auf native support bei Windows Phone 7 zu warten oder du lässt diese Plattform einfach mal großzügig aus. Der Marktanteil von dem System ist glaube ich auch vernachlässigbar im Moment ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 27, 2011 10:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Android

Wenn dein Programm auf Linux läuft wirst du hier keine Probleme bekommen. Es empfielt sich aber trotzdem ein Launcherprogramm für Dalvik
(es ist übrigens ein fataler Irrglaube das Android mit Java arbeitet!!!) anzulegen da die meisten Versionen nur diese als Einstiegspunkt akzeptieren.
Ansonsten müsstest du noch darauf Achten, das Android die Hardwareeinstellungen während der Laufzeit ändern kann (z.B. Screenorientation)
was ggf. zu Problemen führt wenn du das nicht für dein Programm deaktivierst. Schau dir einfach mal den Port von Quake 1 an dort hast du ein
mehr oder weniger brauchbares Beispiel.

WP7

Hier bleibt dir nichts anderes übrig als auf C# zu setzen, es gibt zwar gewisse Wege das zu umgehen aber das ist eher semi-legal lol Es empfiehlt sich
übrigens eher mit Silverlight und Softwaregrafik zu arbeiten da du so wesentlich bessere Ergebnisse wie mit XNA erziehlen kannst (außerdem ists einfacher lol).

IOS

Auch hier kannst du ohne weiteres C & C++ mit Objective-C verbinden, was ziehmlich geil sein könnte. Allerdings ist hier das verhalten von Gerät zu Gerät
teilweise so extrem unvorhersehbar und die Entwicklertools von Apple so extrem beschissen das du hier sehr viel mehr Zeit mit der Fehlersuche anstatt mit
programmieren verbringst. Das wäre ja an sich nicht einmal so Schlimm wenn es auch tatsächlich "unsauberen" Code betreffen würde aber das ist nicht der
Fall. Ich kann dir versichern das es in 99.9% der Fälle Systemkomponenten, wie z.B. das UIImageView, sind die dir deine App total zerschießen, wenn du ansonsten
Sauber gearbeitet hast.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]