Hola diego. Acabo de desarrollar éste código, a ver si te ayuda más. Los valores del array posiciones se calculan de la siguiente manera: (distancia_recorrida_por_la_plataforma / número_total_casillas_plataforma). En mi ejemplo la distancia recorrida es de 170px y la plataforma tiene un total de 10 casillas así que cada "salto" es de 17px (lo que coincide con el tamaño del tile), pero, por ejemplo, podrías hacer que la plataforma recorra 100px y que el número total de casillas de la plataforma sea 20, así cada salto será de tan solo 5px, lo que simulará un movimiento más fluido y menos "a saltos".
El código es bastante poco elegante, en vez de time.sleep() deberías usar las funciones de tiempo que implementa SDL, y alguna que otra mejora como, por ejemplo, que para desplazar los tiles en vez de desplazarlos todos puedes simplemente añadir una nueva casilla en un extremo y eliminar la última casilla del otro extremo. Y ya sabes si sigues teniendo dudas, pregunta xD.
#Importamos los modulos necesarios
from PySFML import sf
import time
#Creamos y configuramos la ventana de juego
window = sf.RenderWindow(sf.VideoMode(640, 480), "Plataforma")
window.SetFramerateLimit(60) #Cantidad maxima de ticks por segundo
#Inicializamos las variables de juego
event = sf.Event() #Gestor de eventos
running = True #Mientras running = True ejecutaremos el juego
sentido = [True, True, False] #True = derecha | False = izquierda
miEscenario = [[0,1,1,1,1,0,0,0,0,0], [0,0,0,0,0,1,1,1,1,0], [0,0,0,1,1,1,1,0,0,0]] #Un escenario con tres plataformas
posiciones = [0,17,34,51,68,85,102,119,136,153] #Las posiciones en las que se dibujaran los tiles (17px)
posicion_horizontal = [100, 150, 400] #Nos permite situar la plataforma donde deseemos (horizontalmente)
posicion_vertical = [150, 220, 330] #Nos permite situar la plataforma donde deseemos (verticalmente)
#Cargamos la imagen
tile = sf.Image()
tile.LoadFromFile("tile.jpg")
tile = sf.Sprite(tile)
#Iniciamos el bucle principal
while running:
while window.GetEvent(event):
if event.Type == event.Closed:
running = False
nplat = 0 #Numero de plataforma
for plataforma in miEscenario:
if plataforma[0] == 1: #Si la plataforma llega a la izda hacemos que vaya a la dcha
sentido[nplat] = True
elif plataforma[9] == 1: #Si la plataforma llega a la dcha hacemos que vaya a la izda
sentido[nplat] = False
if sentido[nplat]: #Movemos todos los tiles 1 posicion a la dcha
index = 9
while index > 0:
plataforma[index] = plataforma[index - 1]
index -= 1
plataforma[0] = 0
else: #Movemos todos los tiles una pos. a la izda
index = 0
while index < 9:
plataforma[index] = plataforma[index + 1]
index += 1
plataforma[9] = 0
nplat += 1
window.Clear()
index = 0
nplat = 0
for plataforma in miEscenario:
for casilla in plataforma:
if casilla == 1: #Dibujamos el tile donde la plataforma este a 1
tile.SetPosition(posiciones[index] + posicion_horizontal[nplat], posicion_vertical[nplat])
window.Draw(tile)
index += 1
index = 0
nplat += 1
print miEscenario
time.sleep(0.3) #Las plataformas se moveran una pos. cada 0.3 segundos
window.Display()
window.Close()
Un Saludo!
De la API al IDE y del IDE a la API.