Escolar Documentos
Profissional Documentos
Cultura Documentos
PROYECTO
Adaptacin de videojuegos en dispositivos mviles
CARRERA
Ingeniera en Sistemas Computacionales
SEMESTRE
10
ALUMNO
Christian Jair Lindor Valdez
NO. DE CONTROL
07170663
ANTECEDENTES DE LA EMPRESA
La historia comienza mucho antes de los inicios de la compaa. En 1985, cinco hermanos
nacidos en la Bretaa francesa fundaron dos empresas: la corporacin Guillemot y Ubisoft. Cinco aos
despus, los hermanos Michel y Gerard crearon los dos primeros estudios de produccin de Ubisoft,
uno en Francia y otro en Rumana. Fue justo en aquella poca cuando naci Rayman, el famoso hroe
que luch por derrotar al malvado Mr. Dark.
No pas mucho tiempo para que Ubisoft se convirtira en una de las compaas ms grandes del
sector de los videojuegos en el mundo, produciendo algunos de los mejores ttulos para consolas y PC.
A finales de la dcada de los 90, Michel Guillemot, responsable de los estudios Ubisoft, observ
el crecimiento y expansin del mercado de los telfonos mviles en todo el mundo y pens en la opcin
de descargar juegos online para estos dispositivos, convirtindolos as en consolas porttiles.
Se trataba de todo un nuevo universo por explorar, que sobrepasara los 50 millones de
jugadores ya ganados como clientes y, en un plazo aproximado de diez aos, conquistara a miles de
millones de jugadores ocasionales por todo el mundo.
Guillemot quera demostrar que la gente estaba dispuesta a jugar en sus telfonos celulares si
los ttulos ofrecidos presentaban buena calidad y bajos precios. Incluso, los jugadores ocasionales
comenzaran a pedir una mayor calidad y diversidad de juegos, sin tener que actualizar sus dispositivos.
Por esto, sera necesario crear ttulos nicos que se pudiesen jugar en cada uno de los centenares de
telfonos mviles disponibles en aquel momento
ndice
3
Tabla de contenido
1.
Introduccin.....................................................................3
2.
Justificacin......................................................................4
3.
Objetivos..........................................................................5
4.
5.
Problema a resolver..........................................................6
6.
Alcances y limitaciones.....................................................6
7.
Fundamento terico..........................................................7
8.
9.
Resultados.....................................................................44
10.
Conclusiones.................................................................44
11.
Bibliografa..................................................................45
Los lenguajes utilizados para desarrollar en estas plataformas son diferentes, por lo que es
necesario que el cdigo sea transformado de un lenguaje a otro. En iOS se programa en Objective C en
conjunto con C++ y en Android se utiliza Java en conjunto con C++.
Las tareas de forma general a realizar para permitir la adaptacin son las siguientes:
2. Justificacin
Gameloft es una empresa internacional dedicada a desarrollar videojuegos para dispositivos
mviles con un gran repertorio de videojuegos que actualmente estn funcionando en dispositivos con
Java y iOS, Con el objetivo de tener acceso a un mayor mercado se necesita llevar los videojuegos
desde una plataforma a otra.
Publishing es una rea en la que se desarrollan proyectos de los que se toma directamente la
fuente de iOS y se comienza a adaptar desde cero, no hay adaptaciones previas de el videojuegos. Se le
integran caractersticas equivalentes para Android de algunas caracteristicas como :
5. Problema a resolver
El proyecto cuenta con diferentes tipos de problemas, a continuacin se ordenan los problemas
a resolver de mayor a menor importancia:
6
Amazon tiene una tableta llamada Kindle Fire que tiene instalada una versin modificada de
Android y para aceptar una aplicacin solicita que el videjuego muestre un men al inferior de
6. Alcances y limitaciones
El proyecto abarcar la adaptacin del videojuego a la plataforma Android, el juego debe
comportarse igual que en iOS.
7. Fundamento terico
7.1 Herramientas utilizadas
Se utilizaron un conjunto e herramientas y tecnologas para realizar el proyecto, a continuacin
se algunas de ellas:
7
Microsoft Visual C++ incluye conjunto de herramientas que los desarrolladores de Windows en
cualquier nivel pueden utilizar para crear aplicaciones personalizadas mediante configuracin bsica y
experta. Visual C++ es un lenguaje eficaz que est diseado para darle control profundo y detallado al
crear aplicaciones nativas de Windows. (Microsoft Corporation, 2010)
Java
Java es una plataforma que consiste de interfaces de programacin de aplicaciones(API) y una
Java virtual machine(JVM).
Los programas en Java son interpretados por otro programa llamado Java VM. Esto significa
que cualquier computadora con la JVM instalada puede correr cualquier programa en Java. (Pawlan,
1999)
Android
Android es la plataforma mvil mas popular en le mundo. Android te da la una plataforma de
clase mundial para crear tus aplicaciones y videojuegos para usuarios de Android, tambin incluye un
Market para distruirlas de forma instantnea.
Android tambin incluye herramientas para crear aplicaciones que se vean espectacular y tomen
ventaja de la aceleracin por hardware disponibles en cada dispositivo. El adapta la interfaz grafica de
tu aplicacin automticamente de la forma que luzca lo mejor posible en cada dispositivo al mismo
tiempo que te deja tanto control como tu quieras sobre la interfaz grafica entre diferentes dispositivos.
Entre las herramientas disponibles para Android se encuentra un entorno de desarrollo integrado
para Java con caractersticas avanzadas para el desarrollo, depuracin y empaquetado de las
aplicaciones. Usando el entorno de desarrollo puedes crear dispositivos virtuales que emulan cualquier
configuracin de hardware. (Google, 2012)
Android SDK
Android SDK son las siglas de Android Software Development Kit. Es un kit de desarrollo con
el que podremos desde desarrollar aplicaciones hasta ejecutar un emulador del sistema android en la
version que queramos. Cabe decir que es imprescindible para efectuar acciones como el desbloqueo del
arranque o utilizar el controlador adb. (Google, 2012)
OpenGL
OpenGL es una API independiente de la plataforma para el procesamiento de grficos en 3D.
Una gran ventaja de utilizar OpenGL es que es un estndar de la industria. Otros entornos en 3D tienen
caractersticas similares pero son especficos de sistemas Windows.
El funcionamiento bsico de OpenGL consiste en aceptar primitivas tales como puntos, lneas y
polgonos, y convertirlas en pxeles. Este proceso es realizado por una pipeline grfica conocida como
Mquina de estados de OpenGL.8 La mayor parte de los comandos de OpenGL bien emiten primitivas
a la pipeline grfica o bien configuran cmo la pipeline procesa dichas primitivas. Hasta la aparicin de
la versin 2.0 cada etapa de la pipeline ejecutaba una funcin prefijada, resultando poco configurable
(Buss, 2003)
Vertex Processor: Es una unidad programable que trabaja con los vrtices y sus datos
asociados. Las unidades son programadas usando OpenGL Shading Language para ser
ejecutado en este procesador, el resultado es llamado Vertex Shader.
Fragment Processor: Es una unidad programable que trabaja con los valores de los fragmentos y
sus datos asociados. Las unidades son programadas usando OpenGL Shading Language y son
ejecutados en este procesador. Cuando un un Fragment Shader es compilado y enlazado se
obtiene como resultado un Fragmetn Shader. (Kessenich, 2006)
Stack Overflow
11
GPU Gems
Es una coleccin de artculos bastante interesante que cubren aspectos prcticos de tcnicas de
procesador de grficos en tiempo real. Incluye tutoriales comprensibles, ejemplos de cdigo y demos.
Inicialmente se venda como exclusivamente como libro en formato fsico pero en la actualidad se
puede encontrar en formato electrnico de forma totalmente gratuita.
Gameloft DP
Gameloft DP es un sitio nuevo en el que los desarrolladores de todo el mundo que trabajan en
Gameloft pueden compartir su conocimiento con otros estudios. Incluye documentacin de las
herramientas internas de la empresa y tutoriales muy interesantes.
12
Graficacin
Una parte del proyecto consta de trabajar con procesamiento de imgenes en 3D, mejorar la
calidad de los colores que se ven en los dispositivos, de tal forma que se vean iguales en diferentes
pantallas. Esta materia ayudo aportando conceptos que serian tiles al momento de trabajar con
OpenGL y OpenGL Shading Language.
Shader
13
enva a la pantalla.
Textura
Es un espacio de memoria que se utiliza para representar una imagen.
la interfaz grafica.
View
Una View expone una interfaz grafica que interacta con el usuario, como puede ser un botn o
un campo de texto.
AndroidManifest.xml
Toda aplicacin en Android debe tener el archivo AndroidManifest.xml en el directorio raz.
Este archivo contiene informacin esencial de la aplicacin que el sistema Android debe
conocer antes de que la aplicacin pueda ser ejecutada. Algunas cosas que incluye el manifest
son:
Nombre del paquete de Java
Describe los componentes de la aplicacin
Declara los permisos necesarios para ejecutar la aplicacin
La mnima versin de la API de Android que requiere la aplicacin
14
Anlisis y Diseo
Kindle Fire cuenta con dos modos de ejecutar una aplicacin, el modo Full-Screen y el modo
Super-Full-Screen. Cuando
15
Declaracin
de cadenas
Declaracin
de permisos
Codificacin
en Java
Exponer la
funcionalida
d con JNI
Figura 1
Declarando cadenas
El archivo strings.xml es un archivo con formato en XML que declara cadenas de texto que
pueden ser utilizadas dentro de la aplicacin. La implementacin es la siguiente:
<string name="noSoftKeyLabel">set AMAZON_FLAG_NOSOFTKEYS</string>
<string name="noSoftKeyDescription">Allow a app display full screen in
window</string>
Declaracin de permisos
Es necesario solicitar un permiso para poder controlar el comportamiento de la OEM Bar. Los
permisos deben ser especificados en el archivo AndroidManifest.xml . La implementacin es la
siguiente:
#if USE_FULLSCREEN_NOSOFTKEY
<uses-permission
android:name="com.amazon.permission.SET_FLAG_NOSOFTKEYS"
16
m_sInstance.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_N
OT_FULLSCREEN);
}
});
}
public static void FullScreenToggleShowBar()
{
mThis.runOnUiThread(new Runnable()
{
@Override
public void run()
{
m_sInstance.getWindow().clearFlags(FLAG_SUPER_FULLSCREEN);
m_sInstance.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCRE
EN);
}
});
}
#endif
18
20
la tienda o al men.
Market: Abre el Market y muestra un videojuego que permite su descarga.
vnd.youtube: Descarga y muestra un video de YouTube.
Codificacin de la WelcomeScreen
SplashScreenActivity.java.
package APP_PACKAGE;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.content.Context;
21
display;
RelativeLayout mView;
WebView mWebView;
SCR_W = 800;
SCR_H = 480;
webHeight;
webWidth;
public String
K_LINK_TOPDEALS_TEMPLATE =
"http://ingameads.gameloft.com/redir/ads/splashscreen_view.php?
from=FROM&country=COUNTRY&lg=LANG&udid=UDIDPHONE&d=DEVICE&f=F
IRMWARE&game_ver=VERSION&type=android";
public String
K_LINK_TOPDEALS = "";
public static String [] TXT_IGP_LANGUAGES =
{
"EN",
22
GL2JNILib.stateChanged(false);
// Pause framework
GL2JNILib.m_view.onPause(); // ihr fix bug 4596944
}
/// Dismiiss Popop Dialog
if(GL2JNILib.dialogPopup != null)
{
GL2JNILib.dialogPopup.dismiss();
}
closeSplash();
super.onPause();
}
@Override
protected void onResume()
{
GL2JNILib.setWSState(2); // Fix And: 4752673 [Music from game
triggers in Lock screen]
super.onResume();
}
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
if (CLASS_NAME.m_sInstance == null)
{
closeSplash();
return;
}
Intent sender = getIntent();
int lang = 0;
if (sender.getExtras() != null)
{
lang = sender.getExtras().getInt("language");
}
else
{
lang = currentLanguage;
24
@Override
public void onBackPressed()
{
closeSplash();
}
private void startYoutube(String url)
{
// default youtube app
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
List<ResolveInfo> list = getPackageManager().queryIntentActivities(i,
PackageManager.MATCH_DEFAULT_ONLY);
if (list.size() == 0)
{
// default youtube app not present or doesn't conform to the standard
we know
// use the web browser
i = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://www.youtube.com/watch?v=" + url.replace("vnd.youtube:", "")));
}
startActivity(i);
}
#if USE_MARKET_INSTALLER
private void startMarketAppication(String url)
{
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
List<ResolveInfo> list = getPackageManager().queryIntentActivities(i,
PackageManager.MATCH_DEFAULT_ONLY);
if (list.size() == 0)
{
// default market app not present or doesn't conform to the standard
we know
// use the web browser
i = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://market.android.com/" + url.replace("market://", "")));
}
startActivity(i);
}
#endif
28
if(url.startsWith("http://ingameads.gameloft.com/redir/ads/splashscreen_click.php"))
30
return null;
}
}
Figura 2
Para mayor un mayor detalle se incluye el cdigo. (ver anexo A)
37
Genera
r un
FBO
Dibujar
en la
textura
Activar
el
Shader
Dibujar
la
textura
Figura 3
Generar un FBO
Un FBO es el marco de trabajo en el que se dibuja, incluye texturas para representar el color y
la profundidad. La idea principal es crear un nuevo FBO que no se dibuje en pantalla y dibujar sobre el,
despus dibujarlo en pantalla aplicando el Shader.
RenderManager.cpp
#ifdef POST_PROCESS
// Lindor - Post process effect
extern const char *ccVShader;
extern const char *ccFShader;
// Frame buffer
GLuint fbo, fbo_texture, rbo_depth;
GLuint vbo_fbo_vertices;
38
/* Depth buffer */
glGenRenderbuffers(1, &rbo_depth);
glBindRenderbuffer(GL_RENDERBUFFER, rbo_depth);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16,
g_screenWidth, g_screenHeight);
39
GLfloat fbo_vertices[] = {
-1, -1,
1, -1,
-1, 1,
1, 1,
};
40
if (!link_ok) {
TRACE("glLinkProgram:");
return;
}
glValidateProgram(program_postproc);
glGetProgramiv(program_postproc, GL_VALIDATE_STATUS, &validate_ok);
if (!validate_ok) {
TRACE("glValidateProgram:");
41
Dibujar en la textura
Una vez creado el FBO se activa para que lo que se dibuje a continuacin no sea mostrado en
pantalla, realizando todas las operaciones slo en memoria.
42
// Activando Shader
glBindTexture(GL_TEXTURE_2D, fbo_texture);
glUniform1i(uniform_fbo_texture, 0);
Dibujar la textura
El ultimo paso es dibujar la textura en la que dibujamos fuera de pantalla para aplicarle el
efecto.
43
GL_FLOAT,
GL_FALSE,
//
0,
);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableVertexAttribArray(attribute_v_coord_postproc);
glBindBuffer(GL_ARRAY_BUFFER, 0);
Para mayor detalle se incluye el cdigo. (ver anexo B)
9. Resultados
Como resultados se obtuvo un videojuego que corre en Android y cumple con los requisitos
necesarios. El videjuego funciona en Android y tiene implementadas las mismas caractersticas que su
equivalente en iOS.
44
11.
Bibliografa
Buss, S. R. (2003). 3D Computer Graphics. San Diego, California: Cambridge University Press.
Google. (2012). Android, la plataforma mvil mas popular en el mundo. Obtenido de Developers:
http://developer.android.com/about/index.html
Kessenich, J. (2006). OpenGL. Obtenido de OpenGL:
http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf
45
Microsoft Corporation. (2010). Visual Studio. Obtenido de Los productos de Visual Studio 2010:
http://www.microsoft.com/visualstudio/es-es/products
Pawlan, M. (Marzo de 1999). Essentials of the Java Programming Language. Obtenido de oracle:
http://www.oracle.com/technetwork/java/index-138747.html
46