Problema con ruta de archivos..

Problema con ruta de archivos..

Notapor diego_g_09 » Lun Ene 16, 2012 11:08 pm

Buenas tengo el siguiente problema.. estoy tratando de llamar a un proyecto desde otro proyecto, o sea tengo un proyecto A (en pygtk) (que es el primero que ejecuto), que llama al proyecto B (en pygame) (en determinado momento o Action de un boton).
La estructura de mi proyecto esta compuesta de la siguiente forma
src
------ Proyecto A (package)
------ Proyecto B (package)

El problema es el siguiente, cuando ejecuto el proyecto B por separado no tengo ningún problema, me funciona perfecto, carga imagenes del disco, sonidos, etc, pero cuando llamo al mismo proyecto desde el proyecto A, me tira que no encuentra los archivos en disco para cargar, por ejemplo el de la musica, este es el msj de error:

pygame.mixer.music.load(rutaSonido)
pygame.error: Couldn't read from 'Sonidos\musicaFondo.ogg'

He probado con subir niveles (..\ Ruta) y sigo con el mismo msj:

pygame.mixer.music.load(rutaSonido)
pygame.error: Couldn't read from '..\Sonidos\musicaFondo.ogg'

pygame.mixer.music.load(rutaSonido)
pygame.error: Couldn't read from '..\..\Sonidos\musicaFondo.ogg'

Realmente no entiendo el funcionamiento de esto, ya que hace 2 días hice la misma prueba y funciono correctamente, y ahora no.

Gracias y saludos Diego!
diego_g_09
 
Mensajes: 21
Registrado: Sab Ago 07, 2010 11:58 pm

Re: Problema con ruta de archivos..

Notapor shackra » Mar Ene 17, 2012 1:28 am

creo que te podriamos ayudar mejor si nos muestras el codigo fuente ._.

aunque suponiendo un poco por lo que hablas, imagino que la disposicion real de las carpetas en tu proyecto es la siguiente

Código: Seleccionar todo
src
|
+- Proyecto A (package)
|
+- Proyecto B (package)
                    |
                    +- Sonidos
                             |
                             +- musicaFondo.ogg


pero ahora que leo con mas detenimiento, dices que trataste de subir uno o varios niveles e igualmente no sirvió... en Windows se puede usar rutas como "..\..\"?

Deberías comprobar la estructura de archivos de tu Proyecto B.
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica

Re: Problema con ruta de archivos..

Notapor diego_g_09 » Mar Ene 17, 2012 3:00 am

Bueno pude solucionar provisoriamente el problema que tengo pero no he llegado a la solución correcta, explico que hice y pongo codigo, espero no extenderme demasiado:

Mi proyecto se compone de la siguiente manera:

Código: Seleccionar todo
src
|
+- Proyecto A (package)
                    |
                    +-Logica (package)
                             |
                             +- main() ----> del proyectoA (Es el que ejecuto para iniciar)
|
+- Proyecto B (package)
                    |
                    +- Motor (package)
                    |        |                   
                    |        +- Clase que llama a: rutaSonido = os.path.join (self.config.DIR_SONIDOS, nombreMusicaFondo)
                    |                                       pygame.mixer.music.load(rutaSonido)
                    |                                       Donde rutaSonido seria "Sonidos\musicaFondo.ogg'"
                    +- Sonidos (carpeta)
                    |        |
                    |        +- musicaFondo.ogg
                    |
                    +- main() --> del proyectoB


Cuando ejecutaba el main del proyecto A, me daba el error que les comente, lo que hice fue mover la carpeta Sonidos del proyecto B al proyecto A dentro del package Logica (que es quien tiene a la clase main que ejecuto), Ahi se arreglo el problema, pero en realidad esta mal!, porque yo no quiero tener la carpeta Sonido en el proyecto A, sino en el B, y tampoco quiero duplicar la misma, ya que son dos cosas distintas. Porque pasa esto de que si ejecuto en proyecto A la carpeta debe estar en A, y si ejecuto en B debe estar en B,. Recuerdo que cuando me dirijo a proyecto en realidad son dos packages que dividen dos logicas distintas (pygtk y pygame), el proyecto en si es uno solo.

Saludos
Diego
diego_g_09
 
Mensajes: 21
Registrado: Sab Ago 07, 2010 11:58 pm

Re: Problema con ruta de archivos..

Notapor hugoruscitti » Mar Ene 17, 2012 4:50 pm

Hola Diego, estuve investigando el tema de tu consulta y me parece que hay
dos cosas para tener en cuenta.

Las rutas que estás usando son relativas, es decir, dependen del lugar
en donde está corriendo el script. Por ejemplo, si yo hago "pygame.mixer.music.load('musica.wav')"
el archivo se va buscar en la carpeta en la que estoy parado, independientemente de donde
esté mi juego.

Por ejemplo, si estoy en "/home/hugoruscitti" (o en windows "C:\" es indistinto) pygame
va a buscar el archivo "/home/hugoruscitti/musica.wav" (o en windows, por ejemplo, si estába
en "c:\" pygame va a buscar "C:\musica.wav).

¿Cual es la solución?, tu programa debería ser independiente a donde estés parado, solamente
tendría que depender de dónde esté tu programa.

Para eso existe una variable en pygame llamada __file__, que te puede servir para conocer la ruta
al programa y poder cargar.

Te recomiendo tener una función como la siguiente:

import os

def obtener_ruta(archivo):
"""Busca la ruta absoluta a un archivo.

archivo: es la ruta relativa al programa (no al directorio actual).
"""

path = os.path.dirname(os.path.abspath(__file__))
print "El directorio de este script es: ", path
ruta_absoluta = os.path.join(path, archivo)
print "La ruta completa al archivo es: ", ruta_absoluta

return ruta_absoluta


Con esta función, las rutas dejan de ser tan cambiantes, de hecho, puse unas
sentencias "print" para que veas de dónde se quieren cargar los archivos
exactamente.

Este es un ejemplo de cómo podrías usar esa función:

pygame.mixer.music.load(obtener_ruta('sonidos/musicaFondo.ogg'))


Esto se usa en muchos juegos, incluso se suele poner dentro las funciones
básicas de un motor de juegos. Por ejemplo, pilas-engine tiene una función muy similar
llamada "obtener_ruta_al_archivo":

https://bitbucket.org/hugoruscitti/pila ... s/utils.py

Lo diferente, es que pilas no te pide que llames a esa función directamente, sino que lo
hace por vos, por ejemplo si haces "pilas.imagenes.cargar", se llama a la función "obtener_ruta_al_archivo":

https://bitbucket.org/hugoruscitti/pila ... magenes.py


Otra cosa que noté, es que estás utilizando la barra invertida para subir de directorios (osea "..\.."), no se si esto
funciona bien en windows y linux a la vez. ¿Podrías probar con una barra normal "../.." o bien "..\\.."?, también mirá que
la función "os.path.join" se usa para eso mismo:

http://stackoverflow.com/questions/2422 ... on-windows


Saludos!
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Problema con ruta de archivos..

Notapor diego_g_09 » Mar Ene 17, 2012 11:34 pm

hugoruscitti: Sos un GRANDE!!!, me solucionaste el problema, realmente te agradezco el tiempo que te tomaste para explicarlo y con el detalle y calidad que lo hiciste! :D , muchas gracias!.
Ya de paso te cuento que estoy realizando un "mini motor" que puede ser configurado mediante un XML, para mi proyecto de grado, el motivo de este proyecto es aprender a desarrollar videojuegos y por eso propuse la idea. Esta pagina me ha servido muchísimo y he sacado varios ejemplos y también me han solucionado varios problemas como este mismo, por eso mismo ni bien termine el proyecto quisiera aportar a LoserJuegos, subiendo a esta pagina el proyecto ya que lo estoy haciendo comentando TODO el código, es prácticamente un Tutorial el código, es mucho mas comentario que código y explico en cada paso que es lo que estoy haciendo y para que sirve, creo que es un ejemplo muy bueno a seguir si alguien esta comenzando en este mundo, como te digo el fin del proyecto es aprender, por eso quisiera luego ponerme en contacto contigo para ver como podemos hacer para subir el juego (si es que esta apto y tu lo apruebas) una vez terminado (mas o menos por abril) y que quede de ayuda y ejemplo para las personas que están comenzando en este mundo.. No se si puede pasarme tu mail para contactarnos mas adelante.

Saludos
Diego
Muchas Gracias y estamos en contacto!.
diego_g_09
 
Mensajes: 21
Registrado: Sab Ago 07, 2010 11:58 pm

Re: Problema con ruta de archivos..

Notapor hugoruscitti » Mié Ene 18, 2012 2:23 am

Genial diego!, si, me interesa. Te paso mi mail: Imagen
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Problema con ruta de archivos..

Notapor shackra » Jue Ene 19, 2012 12:22 am

Hugo es un master xD :P
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica


Volver a Videojuegos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados