<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Blog de programación e ideas locas</title>
	
	<link>http://egyware.frostdisk.com</link>
	<description>eso lo que dije, sobre programación e ideas locas</description>
	<lastBuildDate>Sat, 14 Apr 2012 23:45:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/egyware" /><feedburner:info uri="egyware" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>egyware</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Desarrollo: Programando con Lua II</title>
		<link>http://feedproxy.google.com/~r/egyware/~3/WEs6k0kcF-w/</link>
		<comments>http://egyware.frostdisk.com/2012/01/10/programando-con-lua-ii/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 20:55:41 +0000</pubDate>
		<dc:creator>egyware</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[EGa2Dengine]]></category>
		<category><![CDATA[Engine]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[ega2dengine]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[integracion]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[motor]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://egyware.frostdisk.com/?p=476</guid>
		<description><![CDATA[Hoy, aprovechando el rato libre que me quedaba decidí seguir programando con Lua. No es mucho lo que hice, es más estoy reprogramando una implementación que hice hace tiempo, le estoy aumentando el acoplamiento para ver si puedo evitar una clase Proxy (aunque con pocas esperanzas). Hace tiempo atrás me topé con una maravillosa biblioteca se llama luabind que permite [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy, aprovechando el rato libre que me quedaba decidí seguir programando con Lua. No es mucho lo que hice, es más estoy reprogramando una implementación que hice hace tiempo, le estoy aumentando el acoplamiento para ver si puedo evitar una clase Proxy (aunque con pocas esperanzas).</p>
<p>Hace tiempo atrás me topé con una maravillosa biblioteca se llama <a href="http://www.rasterbar.com/products/luabind/docs.html" target="_blank">luabind</a> que permite por arte de magia integrar Lua a C++, pero no pude integrarla ya que mi tiempo y mis ganas de aprender como funcionaba eran pocas. Por lo que lei necesitaba compilarse de una manera especial con bjam y Boost Build V2, asi que preferí hacer mi propia implementación pero no desde 0, si no modifiqué un ejemplo encontrado en la wiki de Lua <a href="http://lua-users.org/wiki/CppBindingWithLunar" target="_blank">Cpp Binding With Lunar</a>. Con excelentes resultados en esa ocasión.</p>
<p>Ahora le agregué lo que hice en el <a href="http://egyware.frostdisk.com/2012/01/08/programando-con-lua/" target="_blank">articulo pasado</a> y obtuve esto.</p>
<pre class="brush: jscript; title: ; notranslate">
 print(entero);
 print(string);
 test = Test();
 test.a = 1;
 test.b = 2;
 test.c = 2.0;
 test.hola = &quot;Hola&quot;
 test.a = test:loles(test.b)
 funcion(test);
 </pre>
<blockquote><p>Codigo en lua a ejecutar</p></blockquote>
<pre class="brush: cpp; title: ; notranslate">
int funcion(lua_State *L){
    int n = lua_gettop(L);    /* number of arguments */
    printf(&quot;Numeros de argumentos %d\n&quot;,n);
    //printf(&quot;%s\n&quot;,luaL_typename(L,1));
    LuaType v1(L,1);
    Test t = (Test)v1;
    printf(&quot;Test.a = %d\n&quot;,t.a);
    printf(&quot;Test.b = %d\n&quot;,t.b);
    printf(&quot;Test.c = %f\n&quot;,t.c);
    printf(&quot;Test.hola = %s\n&quot;,t.hola);
    lua_settop(L,0); //borramos todo
    return 0;
};
</pre>
<blockquote><p>Codigo en C++ de la funcion pasada a Lua</p></blockquote>
<a href="http://www.flickr.com/photos/egyware/6674948683/" title="Resulado_lua" rel="flickr-mgr" class="flickr-image"><img src="http://farm8.static.flickr.com/7161/6674948683_341f796ca8.jpg" alt="Resulado_lua" class="flickr-large aligncenter" title="Resultado integración Lua en C++" longdesc="" /></a>
<blockquote><p>Y el nada glorioso resultado</p></blockquote>
<p>El resto del codigo, no lo publicaré para no hacer más latoso este tema LOL (aunque si alguien desea, puedo publicar las modificaciones que le hice a Lunar)</p>
<p>Saludos!</p>
<img src="http://feeds.feedburner.com/~r/egyware/~4/WEs6k0kcF-w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://egyware.frostdisk.com/2012/01/10/programando-con-lua-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://egyware.frostdisk.com/2012/01/10/programando-con-lua-ii/</feedburner:origLink></item>
		<item>
		<title>Desarrollo: Programando con Lua</title>
		<link>http://feedproxy.google.com/~r/egyware/~3/fa6fcCPSxK8/</link>
		<comments>http://egyware.frostdisk.com/2012/01/08/programando-con-lua/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 00:36:42 +0000</pubDate>
		<dc:creator>egyware</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[EGa2Dengine]]></category>
		<category><![CDATA[Engine]]></category>
		<category><![CDATA[binding]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[cpptolua]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[integracion]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[motor]]></category>
		<category><![CDATA[plantilla]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[wrap]]></category>

		<guid isPermaLink="false">http://egyware.frostdisk.com/?p=468</guid>
		<description><![CDATA[Hoy dia, evitando mis quehaceres como siempre. Me dedique a programar un ratito con Lua, no hice la gran cosa pero vamos bien encaminado. Primero lo que fue es crear una plantilla de una clase Wrapper, la cual me permitira extraer y colocar variables entre Lua y C++. Usando especialización de templates (plantillas) podemos especificar [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy dia, evitando mis quehaceres como siempre.<br />
Me dedique a programar un ratito con Lua, no hice la gran cosa pero vamos bien encaminado.</p>
<pre class="brush: cpp; title: ; notranslate">
template
class LuaType {
protected:
private:
    T valor; //!&lt; Contiene el valor que estamos Wrappeando
public:
    /**
      * \brief Crea una nueva variable lista, para ser pasada a Lua
      */
    LuaType(const T t):valor(t) {};
    /**
      * \brief Extrae un valor en la pila, pero sin borrarlo
      */
    LuaType(lua_State *L,int i = -1);

    /**
      * \brief Pone este valor en la sima de la pila de Lua
      *
      * \param L estado actual de Lua
      */
    void pushValue(lua_State *L);

    /**
      * \brief Esta funcion permite recuperar el tipo original de la variable
      *
      * Ejemplo:

      * &lt;code&gt;
 * LuaType entero(5);
 * int variable_normal = (int)entero;
 * &lt;/code&gt;
      * &lt;code&gt;
 * LuaType cadena(&quot;Hola Lua&quot;);
 * char *string = (char *)cadena;
 * &lt;/code&gt;
      * \return el valor de la variable del tipo de este template
      */
    operator T() const {
        return valor;
    }

};
</pre>
<p>Primero lo que fue es crear una plantilla de una clase Wrapper, la cual me permitira extraer y colocar variables entre Lua y C++.</p>
<p>Usando especialización de templates (plantillas) podemos especificar como agregaremos cada tipo de variable en lua.</p>
<pre class="brush: cpp; title: ; notranslate">
template&lt;&gt; LuaType::LuaType(lua_State *L,int i) {
    if(!lua_isnumber(L,i)) {
        luaL_error(L,&quot;Argumento incorrecto&quot;);
    }
    valor  = lua_tointeger(L,i);
};

template&lt;&gt; LuaType::LuaType(lua_State *L,int i) {
    if(!lua_isnumber(L,i)) {
        luaL_error(L,&quot;Argumento incorrecto&quot;);
    }
    valor  = static_cast(lua_tonumber(L,i)); // -1 top stack
};

template&lt;&gt; LuaType::LuaType(lua_State *L,int i) {
    if(!lua_isnumber(L,i)) {
        luaL_error(L,&quot;Argumento incorrecto&quot;);
    }
    valor  = lua_tonumber(L,i); // -1 top stack
};

template&lt;&gt; LuaType::LuaType(lua_State *L,int i) {
    if(!lua_isstring(L,i)) {
        luaL_error(L,&quot;Argumento incorrecto&quot;);
    }
    valor = const_cast(lua_tostring(L,i)); // -1 top stack
};

template&lt;&gt; LuaType::LuaType(lua_State *L,int i) {
    if(!lua_isuserdata(L,i)) {
        luaL_error(L,&quot;Argumento incorrecto&quot;);
    }
    valor  = lua_touserdata(L,i);
};
</pre>
<blockquote><p>Conviertiendo valores de la Pila de Lua a variables en C++</p></blockquote>
<pre class="brush: cpp; title: ; notranslate">
template&lt;&gt; void LuaType::pushValue(lua_State *L) {
    lua_pushinteger(L,valor);
}
template&lt;&gt; void LuaType::pushValue(lua_State *L) {
    lua_pushnumber(L,valor);
}
template&lt;&gt; void LuaType::pushValue(lua_State *L) {
    lua_pushnumber(L,valor);
}

template&lt;&gt; void LuaType::pushValue(lua_State *L) {
    lua_pushstring(L,valor);
}

template&lt;&gt; void LuaType::pushValue(lua_State *L) {
    lua_pushlightuserdata(L,valor);
}
</pre>
<blockquote><p>Pasando las variables a Lua.</p></blockquote>
<p>Parece que todo este código es muy engorroso, pero sin embargo nos facilitará más adelante para programar una clase proxy (la que nos facilitará el uso de estructuras o clases definidas en C++ en Lua)</p>
<p>Ejemplo:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
#include &lt;EGa2D/Lua/Type.h&gt;
#include &lt;EGa2D/Lua/Member.h&gt;

using namespace EGa2D;
using namespace Lua;

char *script = &quot;print(string,entero)\nfuncion(entero,string)&quot;;

int funcion(lua_State *L){
    int n = lua_gettop(L);    /* number of arguments */
    LuaType&lt;int&gt; v1(L,1);
    LuaType&lt;char *&gt; v2(L,2);
    lua_settop(L,0); //borramos todo
    printf(&quot;%d %s&quot;,(int)v1,(char *)v2);
    return 0;
};

int main(int argc,char **argv){
    lua_State *L;
    L = lua_open();//abrimos lua
    luaL_openlibs(L); //con todas sus bibliotecas

    LuaType&lt;int&gt; entero = 5;
    entero.pushValue(L);
    lua_setglobal(L, &quot;entero&quot;);

    LuaType&lt;char*&gt; string = &quot;Holaaa&quot;;
    string.pushValue(L);
    lua_setglobal(L, &quot;string&quot;);

    lua_pushcfunction(L,funcion);
    lua_setglobal(L, &quot;funcion&quot;);

    if(luaL_dostring(L,script)){
        printf(&quot;Error %s\n&quot;,lua_tostring(L, -1));
    }

    if(L) {
        lua_gc(L, LUA_GCCOLLECT, 0);  // collected garbage
        lua_close(L);
    }

    return 0;
}
</pre>
<p>La idea de usar un Wrapper de los tipos de variables en C++ no es idea mía pero, lo vi programado en codigo que hacia lo mismo pero para una versión vieja de Lua. Así que quise probarlo y hasta el momento me ha traído algunos beneficios al programar (el código se vuelve más sencillo), y bueno espero poder terminar rápido, para poder implementarle scripting al juego y así volverlo más flexible a la hora de programar</p>
<p>Saludos</p>
<img src="http://feeds.feedburner.com/~r/egyware/~4/fa6fcCPSxK8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://egyware.frostdisk.com/2012/01/08/programando-con-lua/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://egyware.frostdisk.com/2012/01/08/programando-con-lua/</feedburner:origLink></item>
		<item>
		<title>Desarrollo: Cargando niveles de Tiled</title>
		<link>http://feedproxy.google.com/~r/egyware/~3/ZG1E4cJjPQw/</link>
		<comments>http://egyware.frostdisk.com/2012/01/05/desarrollo-cargando-niveles-de-tiled/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 17:01:46 +0000</pubDate>
		<dc:creator>egyware</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[EGa2Dengine]]></category>
		<category><![CDATA[Engine]]></category>
		<category><![CDATA[box2d]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[juego]]></category>
		<category><![CDATA[level]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[motor]]></category>
		<category><![CDATA[nivel]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://egyware.frostdisk.com/?p=453</guid>
		<description><![CDATA[Ya había logrado cargar niveles con Tiled, aunque tenia un defecto en la física del nivel. Entonces tuve que primero agregar unas cosas que me recomendaron, una capa extra para definir la fisica en el Tiled. Y ya habia ordenado todo el codigo, asi que ahora me disponia a  cargar los niveles hecho en Tiled. Vista en [...]]]></description>
			<content:encoded><![CDATA[<p>Ya había logrado cargar niveles con Tiled, aunque tenia un defecto en la física del nivel. Entonces tuve que primero agregar unas cosas que me recomendaron, una capa extra para definir la fisica en el Tiled. Y ya habia ordenado todo el codigo, asi que ahora me disponia a  cargar los niveles hecho en Tiled.</p>
<blockquote>
<p align="center">
<a href="http://www.flickr.com/photos/egyware/6630361217/" title="Cargando Niveles de Tiled(1)" rel="flickr-mgr" class="flickr-image"><img src="http://farm8.static.flickr.com/7022/6630361217_ef6c213bdd.jpg" alt="Cargando Niveles de Tiled(1)" class="flickr-medium aligncenter" title="" longdesc="" /></a><br />
Vista en el editor Tiled. Lo rojo transparente indica que es colisionable</p>
</blockquote>
<p>Gracias a esta capa extra y sin muchos problemas (habian unos problemas tontos, pero como siempre no más) pude añadirle la capa fisica que necesitaba el juego.</p>
<blockquote>
<p align="center"><a href="http://egyware.frostdisk.com/blog/wp-content/uploads/2012/01/CargandoNivelesdeTiled3.png"> <a href="http://www.flickr.com/photos/egyware/6630362803/" title="Cargando Niveles de Tiled(3)" rel="flickr-mgr" class="flickr-image"><img src="http://farm8.static.flickr.com/7169/6630362803_7841fdc1c8.jpg" alt="Cargando Niveles de Tiled(3)" class="flickr-medium_640" title="" longdesc="" /></a> </a>  Vista en el juego.</p>
</blockquote>
<p>Aunque no todo era de color rosa, había algo que me incomodaba en ese momento. Tiled entregaba la capa fisica (los tiles de color rojo transpararente) como una matriz o una secuencia de 0 y 1.</p>
<p>Por ejemplo.</p>
<pre>1,0,0,0,1,
1,0,1,0,1,
1,1,1,1,1</pre>
<p>Pero box2D trabaja con rectangulos, circulos, lineas y polygonos y además tenia muchos problemas con la logica del juego como por ejemplo un fantasma que camina a lo largo de una plataforma no lograba caminar correctamente porque creia que su plataforma era más pequeña de lo que se veia. Entonces ¿Como podia pasar de las colisiones que estan en una matriz a muchos rectangulos?</p>
<p>Bueno como esa ocasión estaba apurado hice un algoritmo bastante ingenuo (sencillo o basico)</p>
<pre class="brush: cpp; title: ; notranslate">
//codigo
uint16 *data; //es la matriz con los datos guardada en un arreglo
int layer_w,layer_h; // dimensiones de la matriz
//necesitamos procesar todos los rectangulos
        Rect **r = new Rect*[layer_w];
        for(int i=0; i&lt;layer_w; i++) {
            r[i] = new Rect[layer_h];
        }
        //agregamos los datos en los rectangulos
        for(int y=0; y&lt;layer_h; y++) {
            for(int x=0; x&lt;layer_w; x++) {
                if(data[y*layer_w+x]) { //todo colisionable
                    r[x][y] = Rect(x,y,1,1);
                }
            }
        }
        //ahora aplicar el algoritmo ingenuo
        //!\todo optimizar el algoritmo ingenuo
        for(int x=0; x &lt; layer_w; x++) {
            for(int y=0; y &lt; layer_h; y++) {
                Rect a = r[x][y];
                if(a.width !=0 || a.height != 0) {
                    //buscar
                    for(int i=x; i&lt;layer_w; i++) {
                        for(int j=y; j&lt;layer_h; j++) {
                            Rect v = r[i][j];
                            if(v.width != 0 || v.height != 0) {
                                Rect suma = a + v;
                                //se pueden fusionar y son los mismos datos
                                if(suma.area() == a.area()+v.area() &amp;&amp; data[layer_w*y+x] == data[layer_w*j+i]) {
                                    r[x][y] = suma;
                                    a = suma;
                                    r[i][j].width = 0;
                                    r[i][j].height = 0;
                                }
                            }
                        }
                    }
                }
            }
        }
</pre>
<p>Algoritmo sencillo en C++, se basa en crear una matriz de rectangulos de dimension 1&#215;1 que reprensentan los 1s en las matrices y que pueden sumarse si hay algun rectangulo contiguo.</p>
<p>Luego en Box2D, consideraba los rectangulos que tuvieran Area distinto de 0 quedando esto.</p>
<blockquote>
<p align="center"><a href="http://egyware.frostdisk.com/blog/wp-content/uploads/2012/01/CargandoNivelesdeTiled2.png"> <a href="http://www.flickr.com/photos/egyware/6630362411/" title="Cargando Niveles de Tiled(2)" rel="flickr-mgr" class="flickr-image"><img src="http://farm8.static.flickr.com/7030/6630362411_c2fd2bbf87.jpg" alt="Cargando Niveles de Tiled(2)" class="flickr-medium_640 aligncenter" title="" longdesc="" /></a> </a>Vista actual del juego después de la optimización</p>
</blockquote>
<p>Lo que me permitia, que mis fantasmas u otro enemigo, pueda ver correctamente la plataforma y caminar a lo largo de ella.</p>
<p>Saludos</p>
<img src="http://feeds.feedburner.com/~r/egyware/~4/ZG1E4cJjPQw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://egyware.frostdisk.com/2012/01/05/desarrollo-cargando-niveles-de-tiled/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://egyware.frostdisk.com/2012/01/05/desarrollo-cargando-niveles-de-tiled/</feedburner:origLink></item>
		<item>
		<title>Desarrollo:Organizando y expandiendo</title>
		<link>http://feedproxy.google.com/~r/egyware/~3/WruqdJIAiJ4/</link>
		<comments>http://egyware.frostdisk.com/2012/01/04/desarrolloorganizando-y-expandiendo/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 17:00:25 +0000</pubDate>
		<dc:creator>egyware</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[EGa2Dengine]]></category>
		<category><![CDATA[Engine]]></category>
		<category><![CDATA[expand]]></category>
		<category><![CDATA[expandiendo]]></category>
		<category><![CDATA[organizacion]]></category>
		<category><![CDATA[organize]]></category>

		<guid isPermaLink="false">http://egyware.frostdisk.com/?p=446</guid>
		<description><![CDATA[Uno de los tantos problemas que tenia mi motor (aparte del hecho que reinvencion de rueda) era la carga de Niveles que estaba muy mal programada. Aunque funcionaba pero, cada vez que tenia que agregar una funcionalidad nueva me costaba mucho y por lo tanto muchos dolores de cabeza también. Pero se me ocurrio una [...]]]></description>
			<content:encoded><![CDATA[<p>Uno de los tantos problemas que tenia mi motor (aparte del hecho que reinvencion de rueda) era la carga de Niveles que estaba muy mal programada. Aunque funcionaba pero, cada vez que tenia que agregar una funcionalidad nueva me costaba mucho y por lo tanto muchos dolores de cabeza también. Pero se me ocurrio una idea que tal si, cada tipo de nivel (formato, o como quieran llamarle) ¿Lo lea en distintas clases? Bueno talvez sea muy engorroso lo que planeo, pero actualmente tenia dos tipos de archivos de niveles, uno exclusivo para los actores(Entidades, Objetos de juego o como prefiera decirle) y otro exclusivo para el nivel (escenario, fisica, logica, etc…) entonces por eso me decidi en dos clases distintas y como soy un poco ambicioso hice una clase abstracta que el “Lector de Niveles” en caso de agregar muchas más cosas. Bueno la implementación de este lector fue bastante sencillo e inclusive más de lo que me esperaba, consta de una simple lista con los lectores distintos lectores ya añadidos y cuando quiero leer un nivel reviso su extension de archivo el cual uso para distingir que clase usar.</p>
<p align="center"><a href="http://www.flickr.com/photos/egyware/6630360397/" title="Organizando y expandiendo(1)" rel="flickr-mgr" class="flickr-image"><img src="http://farm8.static.flickr.com/7151/6630360397_da15152609_m.jpg" alt="Organizando y expandiendo(1)" class="flickr-medium aligncenter" title="" longdesc="" /></a> <a href="http://www.flickr.com/photos/egyware/6630360867/" title="Organizando y expandiendo(2)" rel="flickr-mgr" class="flickr-image"><img src="http://farm8.static.flickr.com/7147/6630360867_58cd20cd59_m.jpg" alt="Organizando y expandiendo(2)" class="flickr-medium" title="" longdesc="" /></a></p>
<blockquote>
<p align="center">Cuando se llama LeerNivel en Contexto, lo que ocurre realmente este busca que Reader usar y finalmente lee el nivel con el Reader seleccionado.</p>
</blockquote>
<p>Otro de los problemas que me tuve que solucionar era de como podia manejar los tantos niveles que podria tener, eso si la solución fue bastante estupida porque ya lo habia solucionado pero personalmente no aceptaba que deberia funcionar asi. Queria que un manejador de escena maneje muchas escenas, pero en vez de eso decidí que solo manejara una y que un algo superior manejara muchos manejadores de escenas, lo cual es mucho más limpio y ordenado según mi punto de vista. Lo más importante es que siempre mantengan simple y funcional su codigo.</p>
<p>Y el ultimo problema, aunque este solo fue copy and paste (jaja) es que cada actor podia modificar el entorno que lo rodea, entonces tenia que pasarle un puntero a Contexto.</p>
<p>En conclusión, mi motor no sera del todo poderoso y eficaz, pero se acerca cada vez a una version final y madura del mismo.</p>
<p>Saludos</p>
<img src="http://feeds.feedburner.com/~r/egyware/~4/WruqdJIAiJ4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://egyware.frostdisk.com/2012/01/04/desarrolloorganizando-y-expandiendo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://egyware.frostdisk.com/2012/01/04/desarrolloorganizando-y-expandiendo/</feedburner:origLink></item>
		<item>
		<title>Desarrollo: Leaded Clouds dia 3</title>
		<link>http://feedproxy.google.com/~r/egyware/~3/UhxO-ylMqpA/</link>
		<comments>http://egyware.frostdisk.com/2011/10/07/desarrollo-leaded-clouds-dia-3/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 23:31:10 +0000</pubDate>
		<dc:creator>egyware</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[errores]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[juego]]></category>
		<category><![CDATA[mensajes]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[objecto]]></category>

		<guid isPermaLink="false">http://egyware.frostdisk.com/?p=435</guid>
		<description><![CDATA[Bueno fue el día de resolver bugs -.-&#8217; suelen ser muy molestosos y pueden darse de cualquier tipo de manera problemas en la memoria, un caso no visto de un algoritmo, etc&#8230; Se agrego el comportamiento a los Powers Ups: PowerUp : El disparo es más rapido Vida: Añade una vida adicional Misil: Añade un misil a tu inventario [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno fue el día de resolver bugs -.-&#8217; suelen ser muy molestosos y pueden darse de cualquier tipo de manera problemas en la memoria, un caso no visto de un algoritmo, etc&#8230;</p>
<p>Se agrego el comportamiento a los Powers Ups:</p>
<ul>
<li>PowerUp : El disparo es más rapido</li>
<li>Vida: Añade una vida adicional</li>
<li>Misil: Añade un misil a tu inventario</li>
<li>Bomba: Añade una bomba a tu inventario</li>
</ul>
<div>Se añadio el mensaje <strong>MUST_DIE </strong>este mensaje es muy util, ya que avisa que el Game Object debe morir  o destruirse (por lo tanto liberar los recursos que está usando). Este mensaje es enviado por el componente <strong>Health </strong>que al recibir mensajes del tipo <strong>DAMAGE </strong>que hagan reducir la vida a 0.</div>
<img src="http://feeds.feedburner.com/~r/egyware/~4/UhxO-ylMqpA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://egyware.frostdisk.com/2011/10/07/desarrollo-leaded-clouds-dia-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://egyware.frostdisk.com/2011/10/07/desarrollo-leaded-clouds-dia-3/</feedburner:origLink></item>
		<item>
		<title>Desarrollo: LeadedClouds dia 01</title>
		<link>http://feedproxy.google.com/~r/egyware/~3/Qo-Tas6NAY0/</link>
		<comments>http://egyware.frostdisk.com/2011/10/04/desarrollo-leadedclouds-dia-01/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 04:58:30 +0000</pubDate>
		<dc:creator>egyware</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[component]]></category>
		<category><![CDATA[componente]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[juego]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[objeto]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://egyware.frostdisk.com/2011/10/04/desarrollo-leadedclouds-dia-01/</guid>
		<description><![CDATA[De hace unos dias se logro implementar en el motor el siguiente concepto: “Objetos de juego basados en componentes“ (Game Objects based Component system). Lo cual ha acelerado nuestro proceso de produción, no al 100% pero si bastante en comparación de antes. En comparación del juego actual y AYCE encuentro que el desarrollo va mucho más  rápido. [...]]]></description>
			<content:encoded><![CDATA[<p>De hace unos dias se logro implementar en el motor el siguiente concepto: “Objetos de juego basados en componentes“ (<strong><em>Game Objects based Component system</em></strong>). Lo cual ha acelerado nuestro proceso de produción, no al 100% pero si bastante en comparación de antes. En comparación del juego actual y AYCE encuentro que el desarrollo va mucho más  rápido. Por ejemplo para lograr una imagen con su respectivo cuerpo  físico (usando Box2D) cayera al vació, se necesitaba una clase probablemente que hereda de Actor (que contiene una imagen) y otra clase que hereda de Entidad (que contiene el cuerpo  físico) esto al principio no fue tan dificil de lograrlo, pero aveces los errores y cambiar el  árbol de herencia hacia que esto fuese  horrible. Sin embargo a nuestro objecto de juego le agregamos dos componentes una Imagen y un Cuerpo fisico ambos totalmente independientes y se pudo lograr el mismo resultado sin usar directamente C, C++, Java, etc… si no todo se había definido en un archivo XML.</p>
<p>Bueno en este  resumen de 3 días, básicamente lo que se ha estado desarrollando son los componentes independientes para poder crear los Go (Game Object) y refinando alguno que otro detalle en el engine. Hasta ahora hemos obtenido buenos resultados. Siendo que ya tenemos algunos objetos listos todavía nos faltan otros por implementar. Lo más costoso que hemos tenido que realizar es crear los componentes desde 0, ya que algunos objetos requieren componentes más personalizados. Sin embargo, eso no es una traba muy grande para el desarrollo de un videojuego usando este concepto.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>PS:Mi ortografia debe estar horrible :/</p>
<p>PS:La falta de desarrollo en mi editor lo convirtio en un CTRL+C  y CTRL+V de entidades (Go)</p>
<img src="http://feeds.feedburner.com/~r/egyware/~4/Qo-Tas6NAY0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://egyware.frostdisk.com/2011/10/04/desarrollo-leadedclouds-dia-01/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://egyware.frostdisk.com/2011/10/04/desarrollo-leadedclouds-dia-01/</feedburner:origLink></item>
		<item>
		<title>Casi casi, mi primer parte</title>
		<link>http://feedproxy.google.com/~r/egyware/~3/JbIshYUAGjU/</link>
		<comments>http://egyware.frostdisk.com/2011/08/21/casi-casi-mi-primer-parte/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 02:18:27 +0000</pubDate>
		<dc:creator>egyware</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[casi]]></category>
		<category><![CDATA[parte]]></category>
		<category><![CDATA[vehiculo]]></category>

		<guid isPermaLink="false">http://egyware.frostdisk.com/2011/08/21/casi-casi-mi-primer-parte/</guid>
		<description><![CDATA[Mientras iba a buscar la torta de la celebración de cumpleaños de mi hermana, me disponia a cruzar el semaforo al cual estaba atento si cambiaba o no y derrepente me doy cuenta que un carabinero me habia llamado a orillarme. Rapidamente me orillo como puedo y bajo la ventana de la camioneta mientras mi [...]]]></description>
			<content:encoded><![CDATA[<p>Mientras iba a buscar la torta de la celebración de cumpleaños de mi hermana, me disponia a cruzar el semaforo al cual estaba atento si cambiaba o no y derrepente me doy cuenta que un carabinero me habia llamado a orillarme. Rapidamente me orillo como puedo y bajo la ventana de la camioneta mientras mi hermano apagó la radio. Carabinero : “Documentos del vehiculo y extintor”, maldición!!! desconocia si habia o no habia extintor en el vehiculo pero calmado saque los documentos del vehiculo y mi licencia los cuales el carabinero reviso detalladamente. Carabinero : “El extintor”, a lo cual repondo “vamos por parte” ya afuera del vehiculo para poder sacar el extintor, el cual mi hermano ya habia sacado del asiento trasero,  senti un alivio, saber que el Extintor  estaba asi que se lo pase, pero algo preocupado si estuviera caduco. Y al final el carabinero respondio “Todobien”, luego de eso me voy respirando tranquilamente.</p>
<p>Se notaba a leguas que el carabinero queria sacarme un parte, pero gracias a mi padre que tenia todo en su vehiculo en comparación al jeep(el cual no esta operativo de hace tiempo) que no tiene nada de eso.</p>
<p><em>La razón de este post en mi blog es desconocida.</em></p>
<img src="http://feeds.feedburner.com/~r/egyware/~4/JbIshYUAGjU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://egyware.frostdisk.com/2011/08/21/casi-casi-mi-primer-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://egyware.frostdisk.com/2011/08/21/casi-casi-mi-primer-parte/</feedburner:origLink></item>
		<item>
		<title>Editor de Niveles(Updated)</title>
		<link>http://feedproxy.google.com/~r/egyware/~3/M44D__h-mF0/</link>
		<comments>http://egyware.frostdisk.com/2011/05/26/editor-de-nivelesupdated/#comments</comments>
		<pubDate>Fri, 27 May 2011 01:12:00 +0000</pubDate>
		<dc:creator>egyware</dc:creator>
				<category><![CDATA[Editor]]></category>
		<category><![CDATA[EGa2Dengine]]></category>
		<category><![CDATA[Engine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[ega2dengine]]></category>
		<category><![CDATA[engine]]></category>

		<guid isPermaLink="false">http://egyware.frostdisk.com/?p=396</guid>
		<description><![CDATA[Hoy en dia (y buscando un motivo y ganas para escribir en mi blog) mostrare el avance que llevo con mi editor de niveles (antiguo visualizador de niveles) En en video siguiente mostrara algunas de las  cosas que ya se pueden hacer. [yt]XusHlGmVCcA[/yt] Todavía no he terminado este proyecto, además este video es algo viejo. [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy en dia (y buscando un motivo y ganas para escribir en mi blog) mostrare el avance que llevo con mi editor de niveles (antiguo <a href="http://egyware.frostdisk.com/2010/09/20/visualizador-de-niveles-de-ega2dengine/">visualizador de niveles</a>)</p>
<p>En en video siguiente mostrara algunas de las  cosas que ya se pueden hacer.</p>
<p>[yt]XusHlGmVCcA[/yt]</p>
<p>Todavía no he terminado este proyecto, además este video es algo viejo. Actualmente el editor es capaz de hacer lo siguiente.</p>
<ul>
<li><span style="color: #efefef;">Copy/Paste (incluye imagenes hacia/fuera del programa)</span></li>
<li><span style="color: #efefef;">Trabajar con más de un nivel</span></li>
<li><span style="color: #efefef;">Cuadricula y Modo libre</span></li>
<li><span style="color: #efefef;">Zoom</span></li>
<li><span style="color: #efefef;">Cargar/Guardar/Guardar Comoo</span></li>
<li><span style="color: #efefef;">Otras caracteristicas pequeñas</span></li>
</ul>
<p>Y más adelante me gustaria implementar (aunque para lograr esto debo trabajarlo conjuntamente con el engine)</p>
<ul>
<li><span style="color: #efefef;">Capas</span></li>
<li><span style="color: #efefef;">Zonas</span></li>
<li><span style="color: #efefef;">Editor de Animaciones</span></li>
<li><span style="color: #efefef;">Scripting</span></li>
<li><span style="color: #efefef;">etc…</span></li>
</ul>
<p>Bueno para no aburrirlos más me despido</p>
<p>Saludos nos leemos en el próximo post.</p>
<p>PS: Me gusto mucho el Windows Live Writer para escribir post, solo me falta un spell checker en español porque lo necesito ^^U</p>
<img src="http://feeds.feedburner.com/~r/egyware/~4/M44D__h-mF0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://egyware.frostdisk.com/2011/05/26/editor-de-nivelesupdated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://egyware.frostdisk.com/2011/05/26/editor-de-nivelesupdated/</feedburner:origLink></item>
		<item>
		<title>Transfiriendo archivos usando Java de la forma incorrecta</title>
		<link>http://feedproxy.google.com/~r/egyware/~3/v8-nGXTagjA/</link>
		<comments>http://egyware.frostdisk.com/2011/04/12/transfiriendo-archivos-usando-java-de-la-forma-incorrecta/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 15:03:37 +0000</pubDate>
		<dc:creator>egyware</dc:creator>
				<category><![CDATA[Escritorio Remoto]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Ideas Locas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[archivos]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[memoria]]></category>
		<category><![CDATA[optimizacion]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://egyware.frostdisk.com/?p=346</guid>
		<description><![CDATA[Hoy en día les mostrare como transferir archivos en java de la forma incorrecta. La razón de este artículo es que un amigo me pidió ayuda de cómo transferir archivos a pesar que le dije como hacerlo, no logró hacerlo de la manera correcta(hasta donde yo se). Y por asuntos didácticos dividiré este artículos en [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy en día les mostrare como transferir archivos en java de la <strong>forma incorrecta</strong>.<br />
La razón de este artículo es que un amigo me pidió ayuda de cómo transferir archivos a pesar que le dije como hacerlo, no logró hacerlo de la manera correcta(hasta donde yo se). Y por asuntos didácticos dividiré este artículos en dos partes (transfiriendo archivos de manera incorrecta y correcta).</p>
<p>El siguiente código que les mostraré como transferir el archivo de la forma incorrecta, espero que al leerlo se de cuenta de cual es el error.</p>
<p>Primero debemos crear el servidor, primero el código para aceptar una simple conexión</p>
<pre class="brush: java; title: ; notranslate">
ServerSocket server = new ServerSocket(1234);
Socket conexion = server.accept();
</pre>
<p>Básicamente lo que hacemos es crear un <a href="http://download.oracle.com/javase/6/docs/api/java/net/ServerSocket.html" target="_blank">ServerSocket</a> el cual se pone a la escucha en el puerto <strong>1234</strong> (un numero cualquiera pero debe ser superior a 1024). La siguiente linea lo que hace es esperar una conexión (esta función se bloquea hasta que alguien se conecte al puerto abierto) y devolverá un objeto <a href="http://download.oracle.com/javase/6/docs/api/java/net/Socket.html" target="_blank">Socket</a> el cual manejará la conexión.</p>
<p>Luego debemos enviar el archivo (de la manera mala)</p>
<pre class="brush: java; title: ; notranslate">
File transfer = new File(&quot;~/archivo pequeño.doc&quot;);
FileInputStream fin = new FileInputStream(transfer);
byte datos[] = new byte[fin.available()]; ///noten esto
fin.read(datos);
OutputStream out = conexion.getOutputStream();
out.write(datos);
out.flush();
out.close();
conexion.close();
</pre>
<p>Básicamente hemos transferido nuestro archivo de mala manera, pero también nos falta recibir nuestro archivo también de mala manera</p>
<pre class="brush: java; title: ; notranslate">
Socket descargar = new Socket(&quot;localhost&quot;,1234);
InputStream in = descargar.getInputStream();
byte descarga[] = new bytes[in.avalaible()]; //noten esto
in.read(descarga);
FileOutputStream fout = new FileOutputStream(new File(&quot;~/archivo transferido.doc&quot;));
fout.write(descarga);
descargar.close();
</pre>
<blockquote><p>En las partes que les mencione en el código (<strong><em>noten esto</em></strong>) se darán cuenta que nuestro programa puede quedarse sin memoria al tratar de transferir un archivo muy grande.</p></blockquote>
<p>Bueno espero que tengán deduzcan la forma correcta de transferir archivos antes que yo la postee, Saludos!!</p>
<p>Nota:Avisar si hay algún error, hice a la rapida este articulo :S</p>
<img src="http://feeds.feedburner.com/~r/egyware/~4/v8-nGXTagjA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://egyware.frostdisk.com/2011/04/12/transfiriendo-archivos-usando-java-de-la-forma-incorrecta/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://egyware.frostdisk.com/2011/04/12/transfiriendo-archivos-usando-java-de-la-forma-incorrecta/</feedburner:origLink></item>
		<item>
		<title>Usando un poco de reflección con Java</title>
		<link>http://feedproxy.google.com/~r/egyware/~3/Nbb4u7iDSEw/</link>
		<comments>http://egyware.frostdisk.com/2011/01/13/usando-un-poco-de-refleccion-con-java/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 15:40:52 +0000</pubDate>
		<dc:creator>egyware</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Reflección]]></category>
		<category><![CDATA[reflexión]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://egyware.wordpress.com/?p=128</guid>
		<description><![CDATA[Hola, hace tiempo que no escribiá un articulo en mi blog y bueno hoy les mostraré como crear un objeto en Java. Alguién: Pero si yo ya sé eso, es facil: Yo: Si, pero yo crearé un objeto y además llamaré un metodo usando Reflexión Para este tutorial omitiremos ciertas cosas, para dar un primer [...]]]></description>
			<content:encoded><![CDATA[<p>Hola, hace tiempo que no escribiá un articulo en mi blog y bueno hoy les mostraré como crear un objeto en Java.<br />
<strong>Alguién:</strong> Pero si yo ya sé eso, es facil:</p>
<pre class="brush: java; title: ; notranslate">MiClase m = new MiClase();</pre>
<p><strong>Yo:</strong> Si, pero yo crearé un objeto y además llamaré un metodo usando <a href="http://es.wikipedia.org/wiki/Reflexi%C3%B3n_%28inform%C3%A1tica%29">Reflexión</a></p>
<p><em>Para este tutorial omitiremos ciertas cosas, para dar un primer paso con la reflexión y sea más fácil su compresión.</em></p>
<p>Para empezar necesitaremos una clase para probar la reflexión</p>
<pre class="brush: java; title: ; notranslate">
public class MiClase{
  public MiClase(){
     System.out.println(&quot;Objeto contruido&quot;);
  }
  public void funcionSimple(){
    System.out.println(&quot;Funcion Simple&quot;);
  }
}
</pre>
<p>Empecemos entonces, como ya todos saben en Java casi todo es una clase (excepto los tipos primitivos, pero tienen una clase para convertir un <em>int</em> en <em>Integer</em>),  entonces para nuestro caso necestaremos el objeto del tipo <strong><em>Class</em></strong> de <em>MiClase</em></p>
<pre class="brush: java; title: ; notranslate">Class&lt;?&gt; clase = MiClase.class;</pre>
<p>Notese que este metodo no es el unico para obtener la clase de un objeto, existen más que no describire aqui.</p>
<pre class="brush: java; title: ; notranslate">Object objecto = clase.newInstance();</pre>
<p>Este metodo crea una nueva instancia de la clase que esta contenida en el objeto <em>clase</em>. Seguramente al ejecutar todo hasta aqui se daran cuenta que en la salida estandar dira:</p>
<pre class="brush: plain; title: ; notranslate">Objeto contruido</pre>
<p>que significa que todo esta bien.<br />
<strong>Notar que: </strong><span style="color: #ff0000;">Esta función solo crea objetos si la clase tiene un contructor por defecto (sin parametros)</span></p>
<p>Ahora si deseamos llamar a una función sin parametros, la cual debemos obtenerla (todo esto ya se esta volviendo algo complejo)</p>
<pre class="brush: java; title: ; notranslate">Method m = clase.getMethod(&quot;funcionSimple&quot;);</pre>
<p>La clase Method es una clase especial que nos permitira llamar a cualquier función definida en una clase, en este caso estamos obteniendo la funcion <em>&#8220;funcionSimple&#8221;</em> de <em>MiClase</em></p>
<p>Y para finalizar el el tutorial</p>
<pre class="brush: java; title: ; notranslate">m.invoke(objeto)</pre>
<p>Que llamará la función <em>&#8220;funcionSimple&#8221;</em> usando el objeto <em>objecto</em> creado anteriormente y al llamar esta funcion nos saldra en la salida estandar</p>
<pre class="brush: plain; title: ; notranslate">Funcion Simple</pre>
<p>El codigo completo de la clase Main con todo seria:</p>
<pre class="brush: java; collapse: true; light: false; title: ; toolbar: true; notranslate">
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Clase que realiza toda el trabajo
 * @author egyware
 */
public class Main {

    public static void main(String[] args) {
        try {
            Class&lt;?&gt; clase = MiClase.class;
            Object objecto = clase.newInstance();
            Method m = clase.getMethod(&quot;funcionSimple&quot;);
            m.invoke(objecto);
        } catch (IllegalArgumentException ex) {
            ex.printStackTrace();
        } catch (InvocationTargetException ex) {
            ex.printStackTrace();
        } catch (NoSuchMethodException ex) {
            ex.printStackTrace();
        } catch (SecurityException ex) {
            ex.printStackTrace();
        } catch (InstantiationException ex) {
            ex.printStackTrace();
        } catch (IllegalAccessException ex) {
            ex.printStackTrace();
        }
    }
}
</pre>
<p>Como habran notado este tutorial es muy simple, pero les dara un primer acercamiento de como es la Relexión en Java.</p>
<p>Les dejo un link:<br />
Un tutorial de Java: http://download.oracle.com/javase/tutorial/reflect/index.html (Sinceramente nunca lo he visto)</p>
<img src="http://feeds.feedburner.com/~r/egyware/~4/Nbb4u7iDSEw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://egyware.frostdisk.com/2011/01/13/usando-un-poco-de-refleccion-con-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://egyware.frostdisk.com/2011/01/13/usando-un-poco-de-refleccion-con-java/</feedburner:origLink></item>
	</channel>
</rss><!-- Served from: egyware.frostdisk.com @ 2012-05-19 16:54:07 by W3 Total Cache -->

