[Java/Android] Diskussion: Multitouch, OpenGL und mehr

Übersicht Andere Programmiersprachen Allgemein

Neue Antwort erstellen

Tennisball

Betreff: [Java/Android] Diskussion: Multitouch, OpenGL und mehr

BeitragDo, Feb 21, 2013 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag!

DAK und ich haben beschlossen, unsere Diskussion über Multitouch, OpenGL und mehr auf Android hier öffentlich zu machen, da das unserer Meinung nach für alle interessant oder auch wichtig sein könnte.

Begonnen hat die Diskussion in den Kommentaren eines Worklogs zu einem von mir programmierten Android-Spiel. (Es wurde beschlossen auf Android umzusteigen -> Worklog)

DAK hat Folgendes geschrieben:
Viel Erfolg beim Umstieg.
Ein paar Tipps zwecks Portierung eines Computerspiels auf ein Handy:
1) Um die Performance mach dir keine Sorgen. Zumindest im 2D-Bereich kommt Android/Java mit quasi allem mit, was du in BMax hinkriegst.
2) Verwende das Layoutsystem, auch wenn du in dem Layout nur deinen GameView hast. Damit lässt sich das Layout schnell und einfach um Zusatzknöpfe erweitern.
3) Einer der schlimmsten Fehler, die du beim Portieren machen kannst, ist am Bildschirm Cursertasten oder anzeigen zu lassen und die Bedienung sonst wie am Computer zu lassen. Das nimmt dir kostbaren Bildschirmplatz weg (nicht jeder hat ein Nexus 7 oder ein Tablet), funktioniert oft sehr schlecht (vor Allem bei älteren Geräten funktioniert das gleichzeitige Drücken von zwei oder gar mehr Bildschirmtasten nicht richtig, außerdem ist das extrem unbequem) und du vernachlässigst dabei andere Eingabemöglichkeiten, mit denen du das Spiel stark verbessern kannst. So kannst du z.B. Lage- und Beschleunigungssensoren für die Bewegung einsetzen, und Bildschirmknöpfe entweder nur für das Menü verwenden, oder für Sachen, die du sonst nicht hinkriegst, wie z.B. Angriffe.

Ansonsten wünsche ich viel Glück. Solltest du irgendwo stecken, mit dem Android SDK (manche Sachen sind beizeiten echt unlogisch und/oder schlecht dokumentiert im ASDK), schreib mich an.

Grüße,
DAK

Tennisball hat Folgendes geschrieben:
Hallo,

Vielen Dank für die Tipps, DAK, die scheinen mir sehr sinnvoll zu sein. Besonders die Nutzung des Neigungssensors hatte ich noch nicht wirklich in Erwägung gezogen, ist aber eine sehr gute Idee! Multitouch gibt es bei Android aber schon seit Version 2.0, und es gibt nur noch sehr wenige, die noch nicht einmal diese Version haben. Laut http://developer.android.com/a...index.html sind das nur 0,2% aller Android-User. Dennoch werde ich mal darüber nachdenken, zumal da ja noch dein Argument der Unbequemlichkeit steht.
Noch zu 1.: Soweit war mir das klar, jedoch meinte ich die Performance der Geräte. Es gibt ja durchaus Apps, die nicht auf jedem (langsamen) Android-Smartphone flüssig laufen. Aber ich vermute eben, dass das bei uns wahrscheinlich kein Problem sein wird.

Und wo ich gerade dabei bin: Danke auch für die anderen Kommentare!

Gruß,
Tennisball

DAK hat Folgendes geschrieben:
Das mit dem 1) war genau auch wegen der Performance gemeint. Solange deine App in 2D ist, werden die meisten Handys es ohne weiteres packen.
ad Multitouch: Ja, es gibt es, aber es funktioniert nicht immer so toll. Lad dir z.B. Zataka Free von Mike Barkmin aus dem Google Play runter. Das ist ein Spiel, das für die Steuerung Multitouch vollgas braucht. Zumindest bei mir macht sie Blödsinn. Sie erkennt zwar jeden Punkt an dem berührt wurde, nicht aber, wenn einzeln losgelassen oder gedrückt wird. So quasi, Spieler 1 drückt und hält links. Spieler 2 drückt und hält rechts. Bis jetzt geht alles gut. Spieler 1 lässt los, Spieler 2 aber nicht -> wird erst erkannt, wenn Spieler 2 auch loslässt.
So ähnliche Fehler habe ich schon bei einigen Multitouch-Spielen gesehen (nicht bei allen). Obs am Handy oder an den Spielen liegt weiß ich nicht. Ich hab Multitouch selbst noch nicht verwendet.
Als anderes Beispiel für schlechte Bedienbarkeit durch nicht-Anpassen der Steuerung sind Gameboy Emulatoren. Lad dir mal einen runter, spiel 10 min und du wirst sehen, es macht bei weitem weniger Spaß als auf einem echten Gameboy, einfach weil die Steuerung nicht so passt.
Oder lad dir Openttd runter. Am Computer war das Spiel genial. Auf meinem alten Handy, einen HTC Universal mit Stift und Tastatur wars auch super. Auf Android, mit Tastatur aber ohne Stift ist es kaum spielbar. (Was wirklich schade ist, weil ich das Spiel doch arg gesüchtelt habe, am HTC Universal).

Tennisball hat Folgendes geschrieben:
Hi DAK,

Also da du ja schreibst, dass manche Apps mit Multitouch bei dir Blödsinn machen und dir nicht sicher warst ob das an den Spielen oder dem Handy liegt, habe ich mal eben eine Test-App dafür geschrieben.
Es wäre sehr nett, wenn du sie testen könntest. Ist auch kein Virus drin oder so. Wink
Hier der Link: https://dl.dropbox.com/u/88139...itouch.apk
[Da das hier ja nun öffentlich ist, wäre es toll, wenn andere das auch noch ausprobieren und ihre Beobachtung posten könnten]
Edit: Hier ein QR-Code: https://dl.dropbox.com/u/88139404/qrcode.png


Was passieren soll:
- Es sollen 2 virtuelle Joysticks angezeigt werden, jeweils einer in der unteren linken und unteren rechten Ecke
- Es soll (zunächst links oben) ein Bild angezeigt werden (Grün mit blauem Dingens und rotem Raster)
- Mit den 2 Joysticks soll das Bild bewegt bzw. skaliert werden, dabei können beide Joysticks gleichzeitig bedient werden
- Löst man einen Finger, der einen Joystick bediente, vom Touchscreen, soll der enstprechende Joystick die "Ausgangsposition" annehmen

(Bei mir klappt die App einwandfrei. Smile Dennoch sind die Joysticks vielleicht etwas ungeschickt positioniert.)
Ich wäre dir dankbar, wenn du das bei dir testen könntest und mir dann berichtest, ob das so geklappt hat.

Danke schonmal im Voraus!

Gruß,
Tennisball

DAK hat Folgendes geschrieben:
Joa, die Joysticks funktionieren schon. Wirds wohl an der Anwendung liegen. Wenn du zwei Joysticks verwenden willst, dann mach die App besser in Landscape-Mode, dann passen sie bequemer auf den Schirm.

Was bei mir aber nicht funktioniert hat, waren die Grafiken. Ich hab nur weiße Vierecke auf grauem Grund gesehen.

Tennisball hat Folgendes geschrieben:
Okay, vielen Dank fürs Testen. Ich vermute, das mit den weißen Grafiken liegt daran, dass ich die Bilder nur im Ordner "\res\drawable-mdpi" gespeichert habe. Weißt du da einen Weg, dass es für alle Smartphones läuft, ohne dass man das selbe Bild einfach noch in die anderen Ordner kopiert?

Gruß,
Tennisball

DAK hat Folgendes geschrieben:
Es sollte genügen, wenn sie in dem mdpi-Ordner liegen. Pass aber auf: wenn du das dann auf einem Gerät abspielst, welches nicht mdpi ist, (also ldpi, hdpi oder so), dann werden die Grafiken automatisch beim Laden skaliert! Darauf muss man hald immer achten, wenn man die Bilder mit Pixelgrößen anspricht (z.B. wenn du Frame-Animationen machst).

Ich hab mir deinen Code und die Ressourcen angeschaut. Warum verwendest du eigentlich den GLSurfaceView? Hast du vor, was mit 3D zu machen, dass du dir das GL antust? Könntest ja einfach statt GLSurfaceView den normalen SurfaceView extenden und zum Zeichnen dann einfach canvas.drawBitmap und so verwenden. Rennt auch super schnell und ist wesentlich einfacher.

Was ich mir denken könnte, ist dass du Probleme mit der Hardwarebeschleunigung hast. Was für ein Handy und Android hast du? Hast dus schon am Emulator probiert, und wenn ja, auf welchem? Klappts dort?

Eventuell sollten wir diese Unterhaltung ins Forum stellen, weil das ist was, wos viele Leute aufhängt.

Tennisball hat Folgendes geschrieben:
Hallo,

Zitat:
Es sollte genügen, wenn sie in dem mdpi-Ordner liegen. Pass aber auf: wenn du das dann auf einem Gerät abspielst, welches nicht mdpi ist, (also ldpi, hdpi oder so), dann werden die Grafiken automatisch beim Laden skaliert! Darauf muss man hald immer achten, wenn man die Bilder mit Pixelgrößen anspricht (z.B. wenn du Frame-Animationen machst).

Hm, das hatte ich zuerst vermutet. Dann kann ich mir aber nicht erklären, warum bei dir nur weiße Grafiken erscheinen ... Hast du vielleicht eine Idee? Die Sache mit der Skalierung auf verschiedenen Geräten werd ich mir auch noch mal anschauen, ich muss erstmal zusehen, dass es überall mal möglichst überhaupt läuft. Wink

Zitat:
Ich hab mir deinen Code und die Ressourcen angeschaut. Warum verwendest du eigentlich den GLSurfaceView? Hast du vor, was mit 3D zu machen, dass du dir das GL antust? Könntest ja einfach statt GLSurfaceView den normalen SurfaceView extenden und zum Zeichnen dann einfach canvas.drawBitmap und so verwenden. Rennt auch super schnell und ist wesentlich einfacher.

Ja, ich wollte was mit 3D machen. Zuerst eigentlich nicht, aber ich denke eben, dass für eine Anwendung, die relativ "grafiklastig" ist (-> Spiel) OpenGL besser geeignet ist als der normale SurfaceView. Sagen auch viele andere Entwickler. Ich weiß auch nicht allzu genau, warum das so ist, aber wahrscheinlich rennt es schneller. Einer der Hauptgründe dafür war auch, dass ich OpenGL lernen will.

Zitat:
Was ich mir denken könnte, ist dass du Probleme mit der Hardwarebeschleunigung hast. Was für ein Handy und Android hast du? Hast dus schon am Emulator probiert, und wenn ja, auf welchem? Klappts dort?

Was genau meinst du mit, dass ich Probleme mit der Hardwarebeschleunigung hätte?
Mein Handy ist das LG P880 Optimus 4X HD mit der Android Version 4.0.3.
Am Emulator hab ichs noch nicht versucht, werde ich aber mal in nächster Zeit versuchen.

Zitat:
Eventuell sollten wir diese Unterhaltung ins Forum stellen, weil das ist was, wos viele Leute aufhängt.

Das können wir gerne machen. Wenn du einverstanden bist, kann ich im neuen Subforum einen Thread erstellen und unsere bisherigen Nachrichten posten.

Mit freundlichen Grüßen,
Tennisball

-----

Da fällt mir gerade noch ein, dass du ja anscheinend ohne weiteres auf meinen Quellcode etc. zugreifen konntest. Weißt du ob man sich dagegen auch irgendwie schützen kann?

Gruß,
Tennisball

DAK hat Folgendes geschrieben:
Zitat:
Hm, das hatte ich zuerst vermutet. Dann kann ich mir aber nicht erklären, warum bei dir nur weiße Grafiken erscheinen ... Hast du vielleicht eine Idee? Die Sache mit der Skalierung auf verschiedenen Geräten werd ich mir auch noch mal anschauen, ich muss erstmal zusehen, dass es überall mal möglichst überhaupt läuft.

Ich hab mir deinen Source nicht ganz durchgelesen. Das einzige, was mir da hald aufgefallen ist, war der GLSurfaceView, und dass es damit vllt Probleme geben könnte.

Zitat:
Ja, ich wollte was mit 3D machen. Zuerst eigentlich nicht, aber ich denke eben, dass für eine Anwendung, die relativ "grafiklastig" ist (-> Spiel) OpenGL besser geeignet ist als der normale SurfaceView. Sagen auch viele andere Entwickler. Ich weiß auch nicht allzu genau, warum das so ist, aber wahrscheinlich rennt es schneller. Einer der Hauptgründe dafür war auch, dass ich OpenGL lernen will.

Macht Sinn. Ich frag mich nur, ob es nicht vielleicht sinnvoller wäre, eine vorhandene 3D-Lib zu verwenden. Die gibt's wie Sand am Meer und sind im Gegensatz dazu, was man von Blitz gewohnt ist, auch oft gratis.

Zitat:
Was genau meinst du mit, dass ich Probleme mit der Hardwarebeschleunigung hätte?
Mein Handy ist das LG P880 Optimus 4X HD mit der Android Version 4.0.3.
Am Emulator hab ichs noch nicht versucht, werde ich aber mal in nächster Zeit versuchen.

Wir haben bei einem Uniprojekt kräftig Probleme mit der Hardwarebeschleunigung gehabt. Da hat's unseren CustomView einfach nicht geupdatet, auf einem Gerät (war aber eig. nicht meins), bis wir sie manuell im AndroidManifest deaktiviert haben, für den View.

Zitat:
Das können wir gerne machen. Wenn du einverstanden bist, kann ich im neuen Subforum einen Thread erstellen und unsere bisherigen Nachrichten posten.

Das würde ich gut finden. Ich bin mir sicher, dass das auch wer anderer brauchen könnte.

-----

Java und damit auch Android-Apps lassen sich relativ einfach dekompilieren. Zuerst lässt du dex2jar drüberlaufen, um die Klassen zu extrahieren, und dann öffnest du das neu erstellte jar-File mit JD-GUI und kannst den Source lesen. Leider ist der Decompiler zwar gut genug, dass man lesbaren Source kriegt (mehr oder weniger hald, so verliert er z.B. Parameternamen), aber nicht gut genug, dass man es kompilieren könnte.
Die Ressourcen kriegt man einfacher. Dazu einfach das APK in ZIP umbenennen und mit einem beliebigen Editor öffnen. Einzig die Layouts werden dabei verunstaltet.

Schützen kann man sich dagegen kaum. Ich habe selbst professionelle Apps so dekompilieren können. Es gibt jedoch zwei Sachen, mit denen der Decompiler nicht umgehen kann: innere Klassen und NDK-Code. Beide blockieren den Decompiler, wobei man den Block dabei auch manuell umgehen kann, indem man in dem Jar, dass man nach dem ersten Schritt erhält, die Klasse mit den inneren Klassen manuell aufreißt. Das macht den dekompilierten Code aber leider grausam unverständlich.
Wenns dich interessiert, kann ich dir mehr dazu sagen.

Tennisball hat Folgendes geschrieben:
Hey,

Danke für die vielen Infos! Bei den meisten Sachen ist der Schutz vom Code wohl auch nicht so wichtig.. Wenn es was Geheimes gibt, kann man ja das mit den inneren Klassen machen.. wobei es dann sicher wieder irgendwelche Leute gibt, die nichts besseres zu tun haben und dann versuchen den Code zu knacken.

Ansonsten hat man ja sowieso die APK-Datei und könnte sie einfach anderen Leuten schicken (Was natürlich ein Problem ist, wenn man selbst die Apps verkauft, aber es gibt immer welche die das machen. Ich weiß aber sowieso noch nicht ob und wie ich meine Apps in den App Store bringe... verkaufen, Ingame Items, Werbung?)

Interesse für mehr Info ist vorhanden. Smile

Gruß,
Tennisball


Das waren alle Nachrichten bis jetzt. Ihr dürft natürlich auch gerne mitreden.

Mit freundlichen Grüßen,
Tennisball
  • Zuletzt bearbeitet von Tennisball am Do, Feb 21, 2013 19:02, insgesamt einmal bearbeitet

Lakorta

BeitragDo, Feb 21, 2013 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum Thema Code vor fremden Zugriff schützen: Dafür gibt's die Technik Obfuscator. Dieser verändert den Quellcode so, dass er für Menschen nur schwer nachzuvollziehen ist (allerdings gibt's dagegen auch einige Programme, die das wieder rückgängig machen...). Für Java gibt's z.B. ProGuard. Ich selbst habe ProGuard zwar noch nie benutzt, soll aber ganz gut sein Smile
---

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group