Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - TrOnTxU

#1
No sé si es el enlace o que hay que ser usuario registrado en la pagina de la UPV, pero no puedo ver los enlaces :S

Esto seguro que en la ETSE no pasaba ( jajaja, es broma, :P )
#2
Te estás pegando el currote!
:D Muy chulo!
#3
No quiero desmerecer la parte del diseño y programación (no lo he podido probar tadavía).

Pero un ole por el currote con los gráficos  :)_
#4
General Programadores / Re:ayuda en c++
11 de Junio de 2019, 04:54:52 PM
Sé que soy pesao, pero es que poneis preguntas sin nada de contexto, y hay que echarle un rato para averiguar a que os referis :(

De entrada, cosas que veo  *(DWORD*)(0x01A1B9FC) = 16000; //04E50C5C

Porque escribes en una direccion de de memoria hardcodeada?
Por lo que veo utilizas librerias de windows, y con todo lo de la memoria virtual y el espacio de memoria protegido (no estas en una plataforma embebida como era la NintendoDS, etc.)
Esa direccion la tendrias que obtener de algun sitio, no?

Luego veo que arrancas dos hilos, que parece que nunca terminan.

Y estas modificando un bool desde dos hilos (nombre), y ni siquiera lo has marcado con volatile!
El problema no es que pueda haber una race condition, pero al menos deberias de asegurarte q esa modificacion es atomica y marcada como volatile para que el compilador entienda que no se debe tocar eso al optimizar.

Y esta parte?:
if (reason == DLL_PROCESS_ATTACH)
    {
     CreateThread(0, 0, (LPTHREAD_START_ROUTINE)dll, 0, 0, 0);
    CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Teclado, 0, 0, 0);
}
   else if (reason == DLL_PROCESS_ATTACH)
    {
   
     salir = true;
   }

Tienes un if y luego un else if con la misma condición?
No entiendo el proposito.

Si explicas un poco más que quieres hacer quizás pueda ayudarte un poco.

Salu2
#5
Cita de: [EX3] en 08 de Mayo de 2019, 08:26:44 PM
Cita de: Arthur15 en 07 de Mayo de 2019, 09:15:39 PM
EX3 que es programador?
¿Que es "programador" o que si soy programador?

Salu2...

Pues yo respondo a la primera:
- Es el tio que elige los programas que salen en la tele
#6
Son dos cosas diferentes.

Necesitaras una Cola (Queue), que tambien puedes implementar un List,  para tus "Acciones de Juego".

class IGameAction
{
  abstract virtual bool execute_action_frame();
   // Más cosas
};

List<IGameAction> m_actionList;


Cada accion la podrias definir como una clase derivada.
Y la lista de puntos seria especifica de la accion de moverse,


class MoveAction : public IGameAction
{
List<Points> m_cellList;
// Mas cosas
};

class AttackAction : public IGameAction
{
// Codigo especifico de ataque
};



El código es pseudo codigo inspirado en C#, pero no sé si se entiende la idea.

Pongo la propuesta de que utilices polimorfismo pero lo puedes hacer con estructuras de datos "más POD" e identificadores.
#7
Vaya, demasiada información (es broma  ;))

Podrias poner al menos poner el lenguaje y el framework y especificar un poco la pregunta.

"Por ejemplo en el update se compila en tiempo por frame." soy un poco burro, pero no tengo ni idea a que te refieres. ¿Compilar durante el frame supondria que tienes algun lenguaje interpretado y lo estas pasando a bytecode?

Bueno asi en general, independientemente del lenguaje se podria hacer una cola de acciones y ahi encolar todas las que quieras, siempre puede haber una que al encolarse vacie primero la cola (una accion que cancela las demas acciones en curso).
Las acciones pueden ser desde identificadores a callback pointers, functors, o delegados, o lo que tu veas que tiene el lenguaje que estás utilizando (como has dicho delegados supongo algo asi como C# y me arriesgo a decir que estas en Unity3D :P suposiciones )

Si lo que quieres es mas o menos algo parecido a un sistema de microturnos de un RTS (Starcraft/Warcraft, Age of Empires, etc.) por ejemplo, hay un articulo muy bueno sobre el tema, y aunque está principalmente orientado a la implementación del funcionamiento de la red, la PRIMERA PAGINA, explica por encima el sistema de microturnos, las formas de encolar acciones, como resolverlas, etc. desde el punto de vista de como lo implementaron en el Age of Empires : https://www.gamasutra.com/view/feature/131503/1500_archers_on_a_288_network_.php


Bueno, espero haber sido de ayuda.
Un saludo.
#8
Ultimamente no entro nunca en el foro, por eso no habia visto la pregunta.

No entiendo mucho de 3dsmax, per he echado una mirada al plugin, y me parece que no utiliza el historial.


Creo que lo que hará es recorrer el Modifier Stack: http://help.autodesk.com/view/3DSMAX/2017/ENU/?guid=GUID-8209526B-B4EC-406D-A3E2-D43EA717A28A
Y los podrias recorrer con algo de maxscript del palo: $box001.modifiers como explica en: http://docs.autodesk.com/3DSMAX/16/ENU/MAXScript-Help/index.html?url=files/GUID-00FB1BFB-13C6-478E-B457-8CFA78861F56.htm,topicNumber=d30e85845

Pero como he dicho no tengo mucha idea de 3dsmax.

Espero haberte ayudado (aunque meses tarde ^^).
Un saludo.
#9
Programación gráfica / Re:Juego 2.5D usando OpenGL
29 de Diciembre de 2016, 07:40:01 PM
A mi más bien me parece  que lo que pasa es que los personajes del street fighter no estan rotados sino flipeados.
(si os fijais la sombra cae a la izquierda siempre, o sea que la iluminacion direccional vendria de la derecha)

Escala en X = -1.0

¿es esa la pregunta?
#10
General Programadores / Re:Colliders modelo animado fbx Unity
16 de Noviembre de 2016, 10:56:24 PM
Perdón por contestar tan tarde, pero es que voy bastante liado.

Yo sigo sin ver lo de los "colliders", porque los tienes que marcar como trigger, y a no ser que haya cambiado el Physix, en un principio los triggers en movimiento no garantizan que salte el callback. Y sino los marcas colisionarán de verdad y no creo que tengas los resultados esperados (además de que deberás animar las fisicas por la animación, que es marcar un checkbox, pero que incrementa, como es lógico, el consumo de CPU, por diversas razones que paso de explicar para no enrollarme más).

En el apartado de de métodos estáticos de la clase Physics ( https://docs.unity3d.com/ScriptReference/Physics.html ) tienes una serie de funciones que te permiten detectar que colliders se encuentran dentro de un shape determinado (Box, Sphere, Capsule, Ray o Line).

Puedes utilizar cualquier shape, dependiendo del uso que le quieras dar (lo de la esfera era solo una sugerencia).

Tambien puedes ver los tipos de comprobaciones: "Check" (solo para elementos dentro de el shape en un momento determinado) o "Cast" (para hacer "sweep", esto significa comprobar un shape en movimiento).

Puedes utilizar uno u otro dependiendo de lo que quieras hacer, pero para esto yo recomiendo un check simple (que es un poco más barato de procesar).
Tambien es muy aconsejable "publicar" las variables de posicion y dimensiones del shape en el componente que estes scriptando, y a la vez utilizar las previsualizaciones de Gizmos como https://docs.unity3d.com/ScriptReference/Gizmos.DrawSphere.html o https://docs.unity3d.com/ScriptReference/Gizmos.DrawCube.html para poder visualizar donde estaria exactamente el shape de colision (recuerda que esto solo se muestra en la pestaña de "Scene" y nunca en "Game"), mientras modificas estos valores desde el "Inspector".

Como decia en mi anterior post, es importante la sincronización de la animación con las "ventanas" de golpe, recuperación, etc. De manera que solo en momentos determinados de la animación se realicen este tipos de comprobaciones.
Una descripción muy buena es la que hay en este articulo de Sony Santa Monica sobre el God Of War http://www.gamasutra.com/view/news/108166/Combat_Canceled_God_of_War__Action_Game_Design.php
Aunque ellos utilizan un "script propio" que luego se "compila" a datos, siempre puedes hacer algo muy parecido con script o incluso un herramienta utilizando las ventajas de extension del Editor de Unity3D (que es muy sencillo y rapido de utilizar).
Supongo que igual también se puede hacer algo de esto desde "Animator", pero como dije en mi último post, no controlo mucho de esto, ya que es más nuevo, y yo utilicé Unity3D (para juegos comerciales) en versiones bastante anteriores de hace unos cuantos años.

Espero haberte solventado las dudas.
Un saludo.
#11
General Programadores / Re:Colliders modelo animado fbx Unity
12 de Noviembre de 2016, 05:42:39 PM
Para poner un collider como tu dices bastaria que con que lo añadieras a la jerarquia animada, lo marcaras como trigger, y luego le pongas la propiedad de "animate physics" a la animacion.

Pero no te lo recomiendo. porque si se mueve con la transformacion, seguramente puedas tener conflictos entre la interpolacion de la animacion, y el "fixed rate" de actualizacion de las fisicas. (vamos que pase de largo la detección de colision y salte ningun trigger). Esto tambien se puede solucionar con "sweep", pero la verdad es que Unity (a mi entender) tampoco es que controle magninficamente este tipo de cosas, así que si no hay nada que se pueda hacer en el Animator (que tampoco he tocado mucho) te recomendaria que no añadieras nada a la jerarquia movil.

Para estas cosas se suele utilizar un cast de una esfera por ejemplo (https://docs.unity3d.com/ScriptReference/Physics.SphereCast.html), para "sincronizar" el componente scriptado (Behaviour) con la animación te valdria con exponer propiedades del componente y animarlas, o contar tu mismo los frames en el script.
Y para colocar el shape tendrias que resolver la transformación relativa (LocalToWorld) en el transform que elijas (como te he dicho para mi es mejor elegir el "root" y aplicarle una transformacion relativa).
Utiliza la ventaja del dibujado de gizmos si quieres previsualizar la posicion del shape que vas a castear.

Un saludo.

EDIT: Creo que habia un tutorial bastante antiguo de Unity (de la version 3.1 si no recuerdo mal), con una demo de un "intento" de clon del Ratchet&Clank, que utlizaba esto mismo para detectar la colision del ataque de un puñetazo.
#12
ponlo en un bucle while

using System;
using System.Threading;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
           bool salir = false;
           while( salir == false )
           {
             int res = Convert.ToInt16(Console.ReadLine());
             switch (res)
              {
                      case 1:
                          Console.WriteLine("Felicidades");
                          break;

                      case 2:
                          Console.WriteLine("De lo que te perdes!");
                          Thread.Sleep(1000);
                          Console.WriteLine("***| FIN DEL JUEGO |***");
                          salir = true;
                          break;

                      default:
                          Console.WriteLine("Respuesta invalida");
                          break;
             }
            }
            }
        }
}
#13
... mmm no sé ... yo lo veo my necro
#14
Como aclaración, por abrir un poco el debate (espero que no te importe), y que conste que no me parece mal que lo hagas en C, sobre lo que dices de "millones de lineas de código C", como bien sabrás, es más bien una definición bastante imprecisa.

Sobre la eficiencia de org-mode, no he notado ningun problema exportando un .org por muy grande que este sea. Más que la lentitud ya intrínseca de emacs para realizar algunas acciones.
El problema viene cuando tienes un proyecto con varios archivos, pero estos problemas de tiempo estan asociados con la forma que tiene emacs de abrir los ficheros como "buffers" (tiempo que se incrementa al tener que hacer la comprobación de las caches).

Y respecto al tiempo ganado con C respecto a python (perl, lua, ruby, etc.) para este tipo de programas (sobretodo de parsing y generacion de texto) se nota más que nada en el arranque del "python.exe", pero si tienes pensado parsear varios archivos en una llamada al script, entonces la cantidad de tiempo es despreciable, ya que apenas lo vas a notar desde que invocas el programa hasta que recibes el resultado (generas los archivos, etc.).
Me convenceria más la idea de que es "mejor" usar C por evitarse las depencias del runtime de python o ruby. Pero en la mayoria de sistemas no Windows (linux, MacOsX) ya viene defecto alguna instalación. Y tener siempre instalado algun tipo de interprete de script de este estilo es un plus.
La gran ventaja de estos lenguajes es que puedes crear programas sencillos en mucho menos tiempo, con muchisimas menos lineas de codigo, y por norma general más fácil de mantener (a no ser que comiences a crear un mega super programa que lo hace todo, pero yo creo que es mejor mantener unos pocos scripts independientes por proyecto).

Y intento respaldar mi posicion con algún que otro ejemplo:

  • Sony Santa Monica empaquetaba todos sus recursos para los wad de los God Of War con scripts de Perl.
  • Naughty Dog utiliza DC (DSL in-house dialecto de lisp PLT-Scheme/Racket) para compilar sus datos y lambdas de script ejecutable en run-time.
  • Insomniac tambien utiliza perl para procesar archivos de codigo fuente.
  • El mismo enlace que te he pasado antes es un post del Engine Architect del Bitsquid/Stingray.
  • Y la lista puede seguir un buen rato más ...

Mi punto de vista es que la mayoria empresas que optimizan mucho en C/C++ y ASM para los run-time de sus juegos (que creo que son de los más "optimizados" del mercado a mi entender), utilizan lenguajes de scripts para procesar datos de forma "offline" (entiendase aqui como software que no se utiliza en el producto final, sino para su desarrollo).

Por tanto, y vuelvo a decir que no tengo nada en contra de el parser este en C, yo creo que cada herramienta es la más adecuada para cada problema.
Y una ultima cesión retórica :P, estoy de acuerdo con lo que dices que "lo importante es el buen diseño", pero discrepo un poco con lo del buen código.
Parafraseando al gran Mike Acton, "un buen programador no lo és porque escribe código, el código es una herramienta, un buen programador lo és porque sabe resolver problemas de datos y transformaciones".


Un saludo.

EDIT:
Respecto al formato (que lo queria comentar y se me habia olvidado), yo lo veo muy completo y pensado :), pero tienes una buena cantidad de trabajo por delante. Pero quizás echar un ojo a los parser que ya hay de org-mode te puede dar alguna ayuda o servir de guia de consulta: http://orgmode.org/worg/org-tools/.

Yo personalmente ya utilizo org, y los parser de documentacion que tengo son más especificos (como uno para generar winhelp-html, y las definiciones de los bindings de C con lua, y cosas por el estilo), así que no me apunto, sorry ^^
#15
Yo utilizo org-mode todos los días, y lo que lo diferencia (para mejor) respecto a otros similares como Markdown, creo que es el poder editar el texto con los shortcuts y comandos de emacs org-mode, mas que nada.
Lo malo de org-mode es que necesitas emacs para exportar (aunque hay algunas utilidades en varios lenguajes para parsear un fichero sencillo).

Ten en cuenta que ya hay varios formatos de este tipo como el Markdown y el RestructuredText, pero si sigues queriendo crear algo "más especifico", yo te recomendaría que utilizaras python, ruby, u otro lenguaje por el estilo para el parser; igual hacerlo en C es matar moscas con explosivo plástico.

Por si te sirve de algo, puedes echar un vistazo a este post, es muy sencillo:
http://bitsquid.blogspot.com.es/2011/09/simple-roll-your-own-documentation.html

Un saludo







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.