• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pygame/Python - matematyka

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+1 głos
568 wizyt
pytanie zadane 18 czerwca 2022 w Python przez Karp.exe Początkujący (340 p.)

Witam mam problem z tym, że gdy postać dotyka innego obiektu od innej strony niż góra program działa jakby nie było tego obiektu (nie zaprogramowałem tego, bo nie wiem jak) proszę o pomoc.

kod:

    def move(self):
        global scrollx, jump, moving_left, moving_right
        Gravity = 3
        dx = 0
        dy = 0
        dy += Gravity
        if moving_left:
            dx -= 4
        elif moving_right:
            dx += 4
        if jump:
            dy += self.vely
            self.vely += 1
            if self.vely == 0:
                jump = False
                self.can_jump = True
                self.vely = -30
        # o to chodzi
        for tile in obstacle_list:
            if (self.rect.x + self.rect.height) >= tile.x and (self.rect.y + self.rect.height) >= tile.y and jump == False:
                dy = 0
        #dotąd
        scrollx = -dx
        self.rect.x += dx
        self.rect.y += dy

 

1 odpowiedź

+2 głosów
odpowiedź 18 czerwca 2022 przez VBService Ekspert (256,600 p.)

Może użycie pygame.Rect.colliderect  ułatwi Tobie "oprogramowanie wykrywania kolizji" obiektów.

 

przykład

import pygame
from pygame.locals import *
from sys import exit

pygame.init()

window_size = (600, 400) 
window = pygame.display.set_mode(window_size)
pygame.display.set_caption('Squares')
clock = pygame.time.Clock() 
 
GREEN = (0, 255, 0)
BLUE  = (0, 0, 255)
BLACK = (0, 0, 0)
 
green_square_x_pos = 300
green_square_y_pos = 100
 
blue_square_x_pos = 100
blue_square_y_pos = 50

window_frame = Rect(0, 0, window_size[0], window_size[1])
square_green = Rect(green_square_x_pos, green_square_y_pos, 100, 100)
square_blue  = Rect(blue_square_x_pos, blue_square_y_pos, 100, 100)

pixel_step = 5
 
while True:
    keys = pygame.key.get_pressed()

    for event in pygame.event.get():
        if event.type == pygame.QUIT or keys[pygame.K_ESCAPE]:
            pygame.quit()
            exit()

    blue_square_x_pos = 0
    blue_square_y_pos = 0
        
    if keys[pygame.K_RIGHT]:
        blue_square_x_pos = pixel_step
                    
    if keys[pygame.K_LEFT]:
        blue_square_x_pos = -pixel_step

    if keys[pygame.K_DOWN]:
        blue_square_y_pos = pixel_step
                    
    if keys[pygame.K_UP]:
        blue_square_y_pos = -pixel_step                

    square_blue.move_ip(blue_square_x_pos, blue_square_y_pos)            
    collide = pygame.Rect.colliderect(square_blue, square_green)

    if collide:
        if keys[pygame.K_RIGHT]:
            blue_square_x_pos = -pixel_step
                    
        if keys[pygame.K_LEFT]:
            blue_square_x_pos = pixel_step
                
        if keys[pygame.K_DOWN]:
            blue_square_y_pos = -pixel_step
                    
        if keys[pygame.K_UP]:
            blue_square_y_pos = pixel_step 
                
        square_blue.move_ip(blue_square_x_pos, blue_square_y_pos)

    square_blue.clamp_ip(window_frame)
 
    window.fill(BLACK)
 
    pygame.draw.rect(window, GREEN, square_green)
    pygame.draw.rect(window, BLUE, square_blue)
    
    pygame.display.flip()
    clock.tick(60)

 

Podobne pytania

0 głosów
1 odpowiedź 272 wizyt
pytanie zadane 18 września 2019 w Python przez Jakub Chomicz 1 Użytkownik (840 p.)
0 głosów
0 odpowiedzi 141 wizyt
pytanie zadane 4 sierpnia 2023 w Python przez Kubas23 Użytkownik (630 p.)

93,440 zapytań

142,431 odpowiedzi

322,679 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...