[GC] Foro DUDAS PROGRAMACION EN GC

Hola [chiu]
Abro este subforo para ver si la gente se anima a programar y crear jueguitos, que el simple hecho (y en realidad de simple no tiene nada xD) de crear un Pong o con mas practica, un Tetris, os reportara una gran satisfaccion si alguna vez habeis querido crear vuestro propio juego.

En este hilo se intentaran solucionar preguntas acerca de problemas que os surjan programando los juegos y relacionado.

Enlaces de interes:
Completa explicacion a modo de manual, sobre programacion (Librerias y compiladores) en GC.
Concurso realizado por 160R al que le agradezco ayudar a sacar adelante la scene.

---------------------------------------------------------

Primera duda [oki]:
Estoy haciendo los personajes de mi juego y a la hora de presentarlos en pantalla (es un bmp convertido mediante gfx2gc.exe) se ven lineas blancas a modo de perfil, en determinados sitios.
En la imagen muestro como determinados sitios se ven en blanco y si os fijais son solo lineas verticales, de ahi que yo crea que es por culpa de que al programar en GC no se usan los 640 de ancho sino que se usan 320 y a los pixels creados se les duplica el ancho, mientras que mantienen su alto; creo que se entiende :-).
Imagen
Para conseguir que en la segunda imagen no se vean las lineas blancas de la espalda, he aumentado el tamaño del dibujo hacia atras y parece ser que si el dibujo cubre esas zonas estas desaparecen.
Tambien he probado a en vez de agrandar el dibujo, moverlo sobre esas zonas y tambien desaparecen pero aparecen otras nuevas xD, vamos que conseguir que no salga ninguna linea de esas es cosa de comprobar y adaptar los diseños. Creo yo vamos [jaja].
si alguien sabe alguna solucion mas practica lo agradeceria.

Ciao [oki]
A mi también me mareó la forma en que normalmente se dibuja la pantalla en los sources (no es que siempre se programe asi para GC, es que es la forma mas utilizada en los sources por ejemplo en el Superpong)

Como bien dices, aunque la pantalla sea de 640x480, a la hora de calcular coordenadas es como si tubieramos una pantalla de la mitad de ancho: 320 de ancho x 480 de alto.

Así pues una coordenada x en una pantalla de 640x480, en nuestro programilla (la llamamos por ejemplo x2) tendriamos que traducirla a:

x2 = x/2 - "anchura de vuestro dibujo"/4

(Lo de "anchura de dibujo"/4 es en el caso de que querais poner el centro del dibujo y no la esquina superior izquierda que por defecto es la coordenada 0,0 del dibujo)

La coordenada y la tendriamos que calcular simplemente como:

y2 = y/2 - "altura del dibujo"/2

(De nuevo si queremos poner el centro del dibujo en esa coordenada)

Lo curioso es que a la hora de hacer los dibujos no los tienes que hacer el doble de ancho porque la proporción de estos si que la respeta.
Ahora tu duda:

El problema que tienes es simplemente que al dibujar en una pantalla de la mitad de coordenadas pero respetando la proporción original del dibujo, las zonas en que tengas solo un pixel de ancho en un mismo color, probablemente las dibujara (cuando por ejemplo dibujas alrededor de un color que asignas como color transparente) el doble de ancho o directamente no las dibujará.
Así pues, si no recuerdo mal, cuando me pasó a mi lo solucioné dibujando todos esos bordes de 1 pixel de ancho como bordes de como mínimo 2 pixel de ancho.



PD

Gracias por poner un enlace al concurso!! Espero que alguien más se anime.

EDITADO:

En lo de las coordenadas he cambiado el + por el -, siento mi despiste!
Holas [chiu]
Tras tiempo inactivo en este campo vuelvo y con muchas ganas de terminar mi juego.

La duda esta vez es tambien en lo referente a los graficos pero orientada desde otro lado.
A la hora de programar mucha gente no suele tener en cuenta el orden de creacion de los graficos, pensando que es una cosa poco importante porque todo aparecera en pantalla, este creado antes o despues....ERROR!!!

A mi esto me ha traido de cabeza dado que no pense en ello y me pasaba que al mover el personaje, este aparecia por delante de unas cosas pero de repente, aparecia por detras de otras....cosa rara pense.
Como justo aparecia por delante de los sprites (castillo) pero por detras de los pixels (arbol, suelo..), pense que igual seria por eso mismo; algun problema entre sprites y pixels...pero no!!! lo importante esta en el orden de creacion en el source.

Ahora paso a explicarlo tanto graficamente como mediante codigo, para que todos lo podais entender:
while(1){   
      VIDEO_WaitVSync();
      frames++;
      PAD_ReadState(&pad[0], PAD_CHANNEL_0);
      GetInput();
      ClearScreen(0x2B9F2B76);
      Linea();                      -> Crea el escenario (suelo, flor y arbol)
      Creaprota();                  -> Crea el sprite del protagonista.
      Creacast();                   -> Crea el sprite del castillo.
En este ejemplo se ve que lo primero en crearse es el escenario, seguido del protagonista y por ultima el castillo.
Hay que pensar en la pantalla como un conjunto de capas, que va de adentro hacia afuera y por lo tanto, lo creado 1º ira al fondo, lo 2º ira sobre lo 1º y lo 3º ira sobre lo 2º y lo 1º, etc...
El resultado seria el siguiente:
Imagen
Y si querria que el protagonista estuviera por delante de todas las cosas seria:
                Linea();                      -> Crea el escenario (suelo, flor y arbol)
      Creacast();                   -> Crea el sprite del castillo.
      Creaprota();                  -> Crea el sprite del protagonista.
Imagen
Por tanto queda claro que el orden en que esten las funciones da igual, lo que indica que grafico ira primero es la llamada a dicha funcion en el bucle principal del programa (while(1){).

Espero que esto sirva de ayuda a alguien o por lo menos que les sirva para tenerlo en cuenta.

Ciao [oki]
Muy bien explicado!

Esto de que se solapan los gráficos según el orden en que se dibujan en pantalla, es muy útil para ciertas utilidades como hacer varios planos de profundidad en un scroller (montañas de fondo, un bosque más cercano que se desplaza lentamente mientras se avanza, escenario de primer plano, plantas que incluso están por delante de los personajes,...)
Tengo un problema (estoy programando en turbo c++)

Linking NONAME00.EXE
·Linker Error : Undefined symbol _VIDEO_Init in module NONAME.EXE

Estoy usando el compilador de Turbo C++ 3.1, ¿Será ese el problema?
Lo primero es que necesitas usar un compilador para plataformas powerpc, ya sea bien el devkitcube (mas artesano xD) o bien el DevkitPro, mas facil a primera vista y mas amigable si nunca se ha programado.
Las librerias que tienes que usar tampoco son las normales que usas a la hora de programar en C/C++ sino las LibOGC o lo que es lo mismo OpenGC Library.
Si entras en el enlace SCENE de mi firma tienes todos los enlaces [oki]
Hola de nuevo, gracias por tu ayuda pero tengo otro problema:

Hice el Make.bat y me encontré con algunos problemas así que tomé cartas en el asunto y lo corregí:

@ECHO OFF

SET DEVKITCUBE=c:\gc\devkitcube

SET PATH=%DEVKITCUBE%\bin;%PATH%

SET PROGNAME= main

powerpc-eabi-elf-gcc -o %PROGNAME%.elf -Wl,-Ttext,0x80003100 -o %PROGNAME%.elf c:/gc/main.c c:/gc/libogc/lib/pad.c c:/gc/libogc/lib/video.c c:/gc/libogc/lib/render.c c:/gc/libogc/lib/audio.c c:/gc/libogc/lib/color.c c:/gc/libogc/lib/debug.c c:/gc/libogc/lib/dvd.c c:/gc/libogc/lib/interrupt.c c:/gc/libogc/lib/random.c c:/gc/libogc/lib/memcard.c
if ERRORLEVEL==1 goto error
ECHO -1
powerpc-eabi-elf-objcopy -O binary %PROGNAME%.elf %PROGNAME%.bin
if ERRORLEVEL==1 goto error
ECHO -2
"c:\gc\libogc-2003-06-22\bin2dol.exe" %PROGNAME%.bin %PROGNAME%.dol
if ERRORLEVEL==1 goto error
ECHO -3
SET PATH=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Archivos de programa\ATI Technologies\ATI Control Panel;C:\Archivos de programa\QuickTime\QTSystem\;C:\GC\libogc\lib
goto end

:error
echo [FATAL ERROR]

:end


De forma que se adapte mejor, y me funcione, pero cuando lo pruebo me sale esto:

C:\GC>make.bat
/cygdrive/c/gc/devkitcube/bin/../lib/gcc-lib/powerpc-eabi-elf/3.3/../../../powerpc-eabi-elf/bin/ld: warning: cannot find entry symbol _start; defaulting to 80003100
-1
-2
El sistema no puede hallar la ruta especificada.
[FATAL ERROR]
C:\GC>


Ahí sí si que desentendí todo. :?

EDITO:

[burla2]Ya lo arreglé: tenía que poner el main.c en la misma carpeta del make.bat además de que arreglé el código:

@ECHO OFF

SET DEVKITCUBE=c:\gc\devkitcube

SET PATH=%DEVKITCUBE%\bin;%PATH%

SET PROGNAME= main

powerpc-eabi-elf-gcc -o %PROGNAME%.elf -Wl,-Ttext,0x80003100 -o %PROGNAME%.elf c:/gc/libogc/crt0.s c:/gc/main.c c:/gc/libogc/lib/pad.c c:/gc/libogc/lib/video.c c:/gc/libogc/lib/render.c c:/gc/libogc/lib/audio.c c:/gc/libogc/lib/color.c c:/gc/libogc/lib/debug.c c:/gc/libogc/lib/dvd.c c:/gc/libogc/lib/interrupt.c c:/gc/libogc/lib/random.c c:/gc/libogc/lib/memcard.c
if ERRORLEVEL==1 goto error
ECHO -1
powerpc-eabi-elf-objcopy -O binary %PROGNAME%.elf %PROGNAME%.bin
if ERRORLEVEL==1 goto error
ECHO -2
"c:\gc\libogc\bin2dol.exe" %PROGNAME%.bin %PROGNAME%.dol
if ERRORLEVEL==1 goto error
ECHO -3
SET PATH=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Archivos de programa\ATI Technologies\ATI Control Panel;C:\Archivos de programa\QuickTime\QTSystem\;C:\GC\libogc\lib
goto end

:error
echo [FATAL ERROR]

:end
Ando con mi proyecto y como no sigo con el problema de los "puntos blancos", pero digamos que hasta que encuentre la forma de solucionarlo puedo llevar relativamente bien el tema :-|
Pero el problema que de verdad me esta tocando los coj**** es que de como se ve en todos los emuladores a como se ve en una television el cambio es [mamaaaaa]

Si alguien sabe como poder evitar el problema de que el ancho real de pantalla sea la mitad (como ya he explicado al principio del post) o como conseguir que se vea bien en la tele, lo agradeceria.
8 respuestas