= Einleitung =
Dieser Artikel soll in mehreren Etappen an das Thema Spieleentwicklung heranführen. Eine allgemeine Einführung in die Thematik bildet dabei den Grundstock. Diese soll Grundbegriffe und Mechanismen überlicksartig erklären. Anschließend werden die einzelnen Teilaufgaben bei der Entwicklung eines Spiels erklärt. Die so erarbeiteten Themen werden abschließend in eine kleine Space Invaders Variante gegossen.
Als kleine Vorwarnung: Ich schreibe seit ca. 10 Jahren kleinere und größere Spiele. Meine Herangehensweise ist sicher nicht die optimalste. Auch können mir im Rahmen dieses Artikels faktische Fehler unterlaufen, ich werde aber versuchen diese zu minimieren. Auch werde ich wo angebracht Anglizismen verwenden da diese das googlen nach weiterführendem Material erleichtern. Auch werde ich einige Wikipedia Links einbauen für Begriffe die man eventuel Nachschlagen möchte. Los geht's.
= Was muss ich vorab wissen? =
In diesem Artikel setze ich ein paar Dinge als Minimum vorraus. Keine Angst, höhere Mathematik gehört nicht dazu :)
* [http://www.mindview.net/Books/TIJ/ Java]
* Handhabung von [http://www.eclipse.org/ Eclipse]
* Installiertes [http://developer.android.com/sdk/index.html Android SDK] sowie [http://developer.android.com/sdk/eclipse-adt.html Eclipse Plugin]
* [http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle Activity Life Cycle]
* [http://developer.android.com/guide/developing/eclipse-adt.html Erstellen eines neuen Android Projekts in Eclipse]
Den Code zu diesem Tutorial könnt ihr euch per SVN von der Addresse http://android-gamedev.googlecode.com/svn/trunk/ holen. Im Projekt gibt es eine Main Activity die euch gleich wie in den SDK Demos eine Liste an Applikationen zeigt. Einfach das Projekt aus dem SVN auschecken, in Eclipse importieren und eine Run Configuration anlegen und die Default Launch Activity starten.
= Wo fang ich an? =
Am Anfang jedes Spiels steht eine Idee. Wird es ein Puzzler? Ein Rundenstrategiespiel? Ein First-Person-Shooter? Auch wenn diese Genres unterschiedlicher nicht sein könnten, so unterscheiden sie sich im Grunde ihres Daseins oft wenig. Ein Spiel kann in mehrere Module zur Erledigung diverser Aufgaben eingeteilt werden:
* '''Applikationsgerüst'''
* '''Eingabe Modul'''
* '''Datei I/O Modul'''
* '''Grafik Modul'''
* '''Sound Modul'''
* '''Netzwerk Modul'''
* '''Simulations Modul'''
Im folgenden wollen wir uns mit diesen 6 Modulen etwas genauer beschäftigen.
== Applikationsgerüst ==
Das Applikationsgerüst stellt die Basis für das Spiel dar. In der Regel ähnelt dieses herkömmlichen Applikationsgerüsten nicht. Spiele sind in den meisten Fällen nicht Event-basiert, d.h. sie laufen ständig, zeichnen dabei die Spielwelt permanent neu, holen sich dauernd neuen User Input und simulieren die Welt (für Kartenspiele und Ähnliches muss dies natürlich nicht gelten). So man nicht gerade für eine Konsole programmiert, stellt sich einem jedoch das Problem, dass die meisten Betriebssystem Event-basierte Programmierung als Paradigma gewählt haben. So auch auf Android. Applikationen werden dabei nur bei Bedarf neu gezeichnet, zum Beispiel wenn der User Text eingibt, einen Button drückt und so weiter, beziehungsweise wird Code nur dann ausgeführt wenn es eine User-Eingabe gibt. Im Allgemeinen hebelt man dies aus, indem man einen seperaten Thread startet der das Betriebssystem veranlasst die Applikation permanent neu zu zeichnen. In diesem Thread befindet sich so gut wie immer eine Schleife, auch Main Loop genannt, innerhalb derer sich immer das selbe abspielt (stark vereinfacht):
while( !done )
{
processInput( )
simulateWorld( )
renderWorld( )
}
Wie genau dieser Main Loop ausschaut hängt von vielerlei Faktoren ab, zum Beispiel dem verwendeten Betriebssystem, dem Spiel selbst und so weiter.
Im Rahmen dieses Artikels werden wir sehen wir man dieses Konzept äußerst einfach auf Android implementieren kann.
== Eingabe Modul ==
Um dem Spieler die Möglichkeit zu geben in das Spielsystem einzugreifen müssen dessen Eingaben irgendwie gelesen werden. Diese Aufgabe übernimmt das Eingabe Modul. Tastaturen, Mäuse, Touch-Screens, Joysticks, Gamepads und einige andere exotische Möglichkeiten stehen hier zur Verfügung. Wie man an die Eingabe kommt ist dabei wieder Betriebssystem-abhängig.
Android verfügt über einige Eingabe Möglichkeiten. Wir werden uns mit den wichtigsten zwei beschäftigen: dem Touch-Screen sowie dem Accelerometer.
== Datei I/O Modul ==
Alle Resourcen eines Spieles müssen in irgendeiner Form der Applikation zugänglich gemacht werden. In speziellen Fällen kann das Spiel diese On-the-fly zur Laufzeit prozedural selbst erstellen, meistens liegen diese aber in Form von Dateien auf einem Datenträger vor. Auch hier gibt es verschiedene Möglichkeiten der Ablage: Dateien können schön geordnet in Ordnern abgelegt werden, wild in einem einzigen Ordner gespeichert sein oder gar in einem Zip-File fein säuberlich gepackt vorliegen. Das Datei I/O Modul soll dies abstrahieren damit im Programmcode der Zugriff auf die Resourcen erleichtert wird.
Android bietet hier schon einen netten Ansatz mit seinem Resourcen und Asset System auf das wir später noch zu sprechen kommen werden.
== Grafik Modul ==
In unseren modernen Zeiten ist für viele Spieleentwickler dieser Teil eines Spiels wohl der wichtigste (teils zu Lasten des Spielspaßes). Dieses Modul übernimmt die Darstellung sämtlicher grafischen Inhalte des Spieles, sei dies das User Interface, welches in der Regel zweidimensional ist oder die Spielewelt selbst, meist in der dritten Dimension. Da letzteres oft rechenintensiv ist, wird spezielle Hardware verwendet um das ganze zu beschleunigen. Die Kommunikation mit dieser Hardware, ihr klar zu machen wie wo was gezeichnet werden soll, sowie die Verwaltung von grafischen Resourcen wie [http://en.wikipedia.org/wiki/Bitmap Bitmaps] und Geometry (auch [http://en.wikipedia.org/wiki/Polygon_mesh Meshes] genannt) ist die Hauptaufgabe dieses System. Hierunter fallen auch Dinge wie das Zeichnen von [http://en.wikipedia.org/wiki/Particle_system Partikel-Effekten] oder der Einsatz von sogenannten [http://en.wikipedia.org/wiki/Shader Shadern] (auf Android noch nicht möglich). Ganz allgemein kann festgehalten werden das die meisten Objekte die simuliert werden auch eine grafische Entsprechung haben. Meiner Erfahrung nach ist es äußerst hilfreich die simulierte Welt komplett unabhängig von der grafischen Darstellung zu machen. Das Grafikmodul holt sich lediglich Information von der Welt-Simulation, hat aber auf diese keinen Einfluss. Wem das etwas zu wage ist: keine Angst der Zusammenhang sollte spätestens beim Entwickeln des Space Invader Clones erkenntlich werden. Es sei jedoch gesagt, dass dieser Ansatz es erlaubt das Grafik Modul beliebig aus zu tauschen, zum Beispiel statt einer 2D Darstellung das ganze auf 3D zu portieren, ohne dass dabei der Simulationsteil geändert werden müsste.
Aufmerksamen Lesern ist vielleicht der Zusammenhang zwischen dem Grafik Modul und dem Main Loop bereits aufgefallen. Neuste Grafikkarten wird meist mit Benchmarks zu Leibe gerückt die die sogenannten Frames per Second (kurz FPS) oder [http://en.wikipedia.org/wiki/Frames_per_second#Frame_rates_in_video_games Frame Rate] messen. Diese geben an wie oft der Main Loop in einer Sekunde durchlaufen wurde. Es wird also gezählt wie oft der Main Loop (Input verarbeiten, Welt simulieren und das ganze dann zu zeichnen) in einer Sekunde durchlaufen wird. Im Zuge unserer Unternehmung werden wir immer ein Auge auf die Frame Rate werfen um etwaige Bottlenecks in unserem Spiel identifizieren zu können.
Später werden wir sehen wie wir Android 2D und 3D Grafiken über [http://en.wikipedia.org/wiki/OpenGL OpenGL ES] entlocken können.
== Sound Modul ==
Soundeffekte und Musik gehören zu jedem guten Spiel. Dementsprechend kümmert sich das Sound Modul um das A
没有合适的资源?快使用搜索试试~ 我知道了~
一些学习OpenGL的开源项目
共217个文件
svn-base:99个
java:50个
all-wcprops:18个
需积分: 42 16 下载量 20 浏览量
2019-03-27
03:59:00
上传
评论 1
收藏 9.49MB RAR 举报
温馨提示
NULL 博文链接:https://jacky-zhang.iteye.com/blog/1177148
资源详情
资源评论
资源推荐
收起资源包目录
一些学习OpenGL的开源项目 (217个子文件)
all-wcprops 3KB
all-wcprops 2KB
all-wcprops 1KB
all-wcprops 1KB
all-wcprops 827B
all-wcprops 644B
all-wcprops 542B
all-wcprops 431B
all-wcprops 274B
all-wcprops 212B
all-wcprops 196B
all-wcprops 170B
all-wcprops 168B
all-wcprops 164B
all-wcprops 80B
all-wcprops 71B
all-wcprops 67B
all-wcprops 66B
.classpath 280B
dir-prop-base 29B
entries 3KB
entries 3KB
entries 1KB
entries 1KB
entries 1KB
entries 901B
entries 891B
entries 721B
entries 524B
entries 422B
entries 383B
entries 370B
entries 361B
entries 358B
entries 244B
entries 231B
entries 223B
entries 214B
IndexedMesh.java 12KB
Renderer.java 10KB
Mesh.java 10KB
Font.java 9KB
GameActivity.java 8KB
MD2Loader.java 8KB
Simulation.java 6KB
Texture.java 5KB
GameOverScreen.java 4KB
Main.java 4KB
StartScreen.java 4KB
MeshLoader.java 4KB
MultipleObjectsSample.java 3KB
SpaceInvaders.java 3KB
TextureSample.java 3KB
ObjSample.java 3KB
LittleEndianDataInputStream.java 2KB
TransformationSample.java 2KB
LightSample.java 2KB
GameLoop.java 2KB
MD2Sample.java 2KB
SoundManager.java 2KB
ColorSample2.java 2KB
ZBufferSample.java 2KB
TextureMeshSample.java 2KB
BackgroundSample.java 2KB
CameraSample.java 2KB
MD2Mesh.java 2KB
PerspectiveSample.java 2KB
Invader.java 2KB
SoundSample.java 1KB
TextSample.java 1KB
TriangleSample.java 1KB
ColorSample.java 1KB
MeshSample.java 1KB
OrthoSample.java 1KB
MusicSample.java 1KB
MD2Instance.java 1010B
InputSample.java 946B
Vector.java 919B
GameListener.java 867B
Shot.java 721B
Ship.java 567B
MD2Header.java 511B
Explosion.java 409B
GameScreen.java 330B
Block.java 298B
MD2Triangle.java 161B
SimulationListener.java 146B
MD2Frame.java 122B
planet.jpg 36KB
knight.jpg 12KB
knight.md2 313KB
8.12.mp3 4.2MB
ship.obj 17KB
invader.obj 9KB
block.obj 2KB
shot.obj 2KB
explosion.ogg 10KB
shot.ogg 9KB
explode.png 83KB
invader.png 56KB
共 217 条
- 1
- 2
- 3
weixin_38669628
- 粉丝: 386
- 资源: 6万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ORACLE数据库管理系统体系结构中文WORD版最新版本
- Sybase数据库安装以及新建数据库中文WORD版最新版本
- tomcat6.0配置oracle数据库连接池中文WORD版最新版本
- hibernate连接oracle数据库中文WORD版最新版本
- MyEclipse连接MySQL的方法中文WORD版最新版本
- MyEclipse中配置Hibernate连接Oracle中文WORD版最新版本
- MyEclipseTomcatMySQL的环境搭建中文WORD版3.37MB最新版本
- hggm - 国密算法 SM2 SM3 SM4 SM9 ZUC Python实现完整代码-算法实现资源
- SQLITE操作入门中文WORD版最新版本
- Sqlite操作实例中文WORD版最新版本
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0