Haciendo Label Jump usando PyQt5 en Python

Requisito previo: Introducción a PyQt5

PyQt5 es un kit de herramientas GUI multiplataforma, un conjunto de enlaces de Python para Qt v5. Uno puede desarrollar una aplicación de escritorio interactiva con tanta facilidad debido a las herramientas y la simplicidad que ofrece esta biblioteca. 

Ahora, veremos cómo podemos hacer que la etiqueta salte. A veces es necesario hacer que la etiqueta salte mientras se diseñan juegos 2-D en PyQt5. La etiqueta de salto es una etiqueta que cuando se presiona la tecla de salto (aquí la barra espaciadora) sube y su velocidad de subida disminuye y cuando alcanza la altura máxima , comienza a bajar con el aumento de la velocidad. La velocidad disminuye al subir y disminuye al bajar por el efecto de la gravedad.

Concepto: podemos hacer que la etiqueta salte cambiando su coordenada Y con el tiempo, podemos obtener la coordenada Y para cada tiempo con la ayuda de la fórmula básica de la mecánica clásica, es decir, la siguiente:
 

Fuerza = 1/2 * masa * velocidad^2

Al disminuir este valor de fuerza desde la coordenada Y inicial, nos dará la nueva coordenada Y para cada vez y luego disminuir la velocidad.
 

Pasos de implementación: 

1. Cree una ventana principal.
2. Cree una bandera de salto y una variable de velocidad y masa. 
3 . Crea una etiqueta.
4. Establezca la geometría de la etiqueta y la hoja de estilo. 
5. Anular el evento de pulsación de tecla. 
6. Dentro de la verificación del evento de pulsación de tecla cuando se pulsa la tecla de la barra espaciadora. 
7. Si se presiona la tecla de la barra espaciadora, haga que la variable de salto sea verdadera. 
8. Cree un objeto de temporizador y agregue una acción al temporizador que se llama cada 50 milisegundos. 
9. Dentro de la acción del temporizador, obtenga la coordenada Y de la etiqueta y verifique si la bandera de salto es verdadera. 
10Si la bandera de salto es verdadera, calcule la fuerza y ​​disminuya el valor de fuerza de la coordenada Y y establezca la nueva posición en la etiqueta. 
11. Si la velocidad se vuelve cero, haga que la masa sea negativa, y si la etiqueta vuelve a la posición normal, haga que la bandera de salto sea falsa y restablezca el valor de masa y velocidad.
 

A continuación se muestra la implementación:
 

Python3

# importing required libraries
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtCore import *
  
import sys
  
# Window class
class Window(QMainWindow):
  
    def __init__(self):
        super().__init__()
  
        # setting title
        self.setWindowTitle("Python ")
  
        # width of window
        self.w_width = 500
  
        # height of window
        self.w_height = 500
  
        # setting geometry
        self.setGeometry(100, 100, 
                         self.w_width, self.w_height)
  
        # calling method
        self.UiComponents()
  
        # showing all the widgets
        self.show()
  
        # speed variable
        self.speed = 5
  
        self.mass = 1
  
        # jump flag
        self.jump = False
  
    # method for components
    def UiComponents(self):
  
        # creating a label
        self.label = QLabel(self)
  
        # label width
        self.l_width = 40
  
        # label height
        self.l_height = 40
  
        # setting geometry to the label
        self.label.setGeometry(200, 200, 
                               self.l_width,
                               self.l_height)
  
        # setting stylesheet to the label
        self.label.setStyleSheet("QLabel"
                                 "{"
                                 "border : 4px solid darkgreen;"
                                 "background : lightgreen;"
                                 "}")
  
  
        # creating a timer object
        timer = QTimer(self)
  
        # setting timer start time
        timer.start(50)
  
        # adding action to the timer
        timer.timeout.connect(self.show_time)
  
  
    # method called by the timer
    def show_time(self):
  
        # checking jump flag
        if self.jump:
  
            y = self.label.y()
  
            # calculate force (F). 
            # F = 1 / 2 * mass * velocity ^ 2.
            # here we are not using  ( 1/2 )
            Force = self.mass * (self.speed ** 2)
  
            # change in the y co-ordinate
            y -= Force
  
            self.label.move(200, y)
  
            # decreasing velocity while going up 
            # and become negative while coming down
            self.speed = self.speed - 1
  
            # object reached its maximum height
            if self.speed < 0:
                # negative sign is added to 
                # counter negative velocity
                self.mass = -1
  
            # objected reaches its original state
            if self.speed == -6:
                # making jump equal to false
                self.jump = False
  
                # setting original values to 
                # speed  and mass
                self.speed = 5
                self.mass = 1
  
    # override the key press event
    def keyPressEvent(self, event):
        
       # if space bar is pressed
       if event.key() == Qt.Key_Space:
          
           # make the jump flag true
           self.jump = True
  
  
  
# create pyqt5 app
App = QApplication(sys.argv)
  
# create the instance of our Window
window = Window()
  
# start the app
sys.exit(App.exec())

Producción : 
 

Publicación traducida automáticamente

Artículo escrito por rakshitarora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *