24-06-2020, 02:21 PM
(Última modificación: 24-06-2020, 10:50 PM por Gantrax.
Razón: Cambié el ejemplo que tiene el problema
)
Hola, tengo el siguiente problema, yo estoy tratando de simular, con un codigo sencillo usando pygame, el movimiento de una pelota
Quiero que una pelota se mueva a mi gusto, pero que si la dejo se quede parada (hay amortiguamientos de la velocidad).
El hecho es que al dejarla reposar (luego de sacarle el reposo inicial) termina iniciando un movimiento lento hacia la ultima pared que haya tocado... Alguien podria ayudarme a identificar porque pasa esto ultimo?
(edite un poco por el aspecto actual del problema)
Gracias.
Saludos!
Quiero que una pelota se mueva a mi gusto, pero que si la dejo se quede parada (hay amortiguamientos de la velocidad).
El hecho es que al dejarla reposar (luego de sacarle el reposo inicial) termina iniciando un movimiento lento hacia la ultima pared que haya tocado... Alguien podria ayudarme a identificar porque pasa esto ultimo?
Código:
import numpy as np
import pygame,sys
from pygame.locals import *
def data():
#print(x)
#print(vx)
#print(deltax)
#print(y)
#print(vy)
#print(ay)
#print(deltay)
print(pygame.key.get_pressed())
alto = 500
ancho = 1000
A=200
h0=0
h0x=0
phi=0
X0=ancho/2
Y0=alto-30
vx=0
vy=0
ay=20
h=0
l=0
x=X0
y=Y0
taupiso=0.75
tau=0.9995
piso=alto-30
usoKEYUP=False
usoKEYDOWN=False
usoKEYRIGHT=False
usoKEYLEFT=False
ck1=0
ck2=0
ck3=0
ck4=0
d=(((piso-y)**2)**(1/2))
intervalo=200
pygame.init()
screen = pygame.display.set_caption("spaceinvader")
ventana = pygame.display.set_mode((ancho, alto))
imagen = pygame.image.load("spaceinvader.png")
rectanguloimg = imagen.get_rect()
deltax=(((x-rectanguloimg.top)**2)**(1/2))
deltay=(((y-rectanguloimg.top)**2)**(1/2))
jugando = True
while jugando:
h=h+1
if (((vx)**2)**(1/2))<0.01:
vx=0
else:
vx=vx*tau
if 0>x:
vx=(-1)*vx
h0x=h-1
X0=x
print("pared1")
if x>ancho-30:
vx=(-1)*vx
h0x=h-1
X0=x
print("pared2")
if y>piso:
Y0=piso
#if (((vy)**2)**(1/2))<0.25:
# vy=0
#else:
vy=(-1)*(vy*taupiso)
h0=h-1
print("piso")
#teclado()
if vy==0:
if d==0:
Y0=piso
h0=h-1
y=int(ay*(((h-h0)/100)**2)+vy*((h-h0)/100)+Y0)
x=int(vx*((h-h0x)/100)+X0)
rectanguloimg.left = x
rectanguloimg.top = y
ventana.fill((0,0,0))
ventana.blit(imagen, rectanguloimg)
pygame.display.flip()
#data()
pygame.time.wait(1)
if ck1>0:
ck1=ck1-1
else:
ck1=0
usoKEYUP=False
if ck2>0:
ck2=ck2-1
else:
ck2=0
usoKEYRIGHT=False
if ck3>0:
ck3=ck3-1
else:
ck3=0
usoKEYLEFT=False
if ck4>0:
ck4=ck4-1
else:
ck4=0
usoKEYDOWN=False
for event in pygame.event.get():
print(event)
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.KEYDOWN:
if event.key==K_UP:
if usoKEYUP==True:
print("Debes esperar para empujarte denuevo")
else:
vy=vy-100
usoKEYUP=True
ck1=intervalo
h0=h-1
Y0=y
elif event.key==K_RIGHT:
if usoKEYRIGHT==True:
print("Debes esperar para empujarte denuevo")
else:
vx=vx+100
usoKEYRIGHT=True
ck2=intervalo
h0x=h-1
X0=x
elif event.key == K_LEFT:
if usoKEYLEFT==True:
print("Debes esperar para empujarte denuevo")
else:
vx=vx-100
usoKEYLEFT=True
ck3=intervalo
h0x=h-1
X0=x
elif event.key == K_DOWN:
if y>460:
print("no space down")
else:
vy=vy+100
usoKEYDOWN=True
ck4=intervalo
h0=h-1
Y0=y
pygame.quit()
(edite un poco por el aspecto actual del problema)
Gracias.
Saludos!