Ich versuche derzeit, in Pygame ein Okklusionsobjekt zu erstellen, der versuche, einen Teil eines Bildes dynamisch zu verdecken. Die Art und Weise, wie ich diese Okklusion derzeit eingerichtet habe, ist, dass es sich um eine transparente Oberfläche handelt, die auf die Hauptoberfläche des Bildes blitzt wird. Unabhängig davon, wie ich diese Okklusion implementieren möchte, habe ich das gleiche Problem mit der Flackern- /inkonsistenten Position der Okklusionsoberfläche
Okklusion mit beabsichtigter Transparenz < /p>
Okklusion mit Färbung < /p>
Methode zum Erstellen von Okklusion innerhalb des Sprite -Objekts sowie der Sprites -Run -Methode: < /p> def create_occlusion_rect(self, pos_x, pos_y, width, height):
#spirte_occlusion = occlusion(pos_x, pos_y, width, height)
spirte_occlusion = [[pos_x, pos_y], pygame.surface.Surface((width, height))]
self.occlusion_rects.append(spirte_occlusion)
return spirte_occlusion
def run(self, event_loop, delta_time):
self.surface.fill((20, 20, 20))
self.surface.blit(self.surface_image, ((self.width_difference), - (self.height_difference)))
for occlusion in self.occlusion_rects:
occlusion[1].fill((0, 0, 255))
self.surface.blit(occlusion[1], occlusion[0])
< /code>
Code für das Waffenobjekt: < /p>
class grab_arms():
def __init__(self, pos, direction, groups):
self.buffer = 50
self.pos = [pos[0] - 24 - self.buffer, pos[1] + 16]
self.direction = direction
self.action = "init"
front = groups[0]
back = groups[1]
arm_image_front = pygame.image.load("assets/pictures/projectiles/arms/front/right/0.png").convert_alpha()
arm_image_back = pygame.image.load("assets/pictures/projectiles/arms/back/right/0.png").convert_alpha()
self.front_arms = sprite("Arms_Front", [self.pos[0] - 6, self.pos[1] + 6], [front], self.pos, [5, 5], arm_image_front, buffer=[self.buffer, 0])
self.back_arms = sprite("Arms_Back", [self.pos[0] - 2, self.pos[1]], [back], self.pos, [5, 5], arm_image_back, buffer=[self.buffer, 0])
self.front_surf_pos = [self.front_arms.pos[0], self.front_arms.pos[1]]
self.back_surf_pos = [self.back_arms.pos[0], self.back_arms.pos[1]]
self.occlusion_width = 40
self.occlusion_width_max = self.occlusion_width
self.occlusion_height = 40
self.total_movement_x = 0
self.total_movement_y = 0
self.back_occlusion = self.back_arms.create_occlusion_rect(self.buffer, 0, self.occlusion_width, self.occlusion_height)
self.front_occlusion = self.front_arms.create_occlusion_rect(self.buffer, 0, self.occlusion_width, self.occlusion_height)
self.reverse = False
self.destroy = False
def run(self, delta_time):
if self.reverse == False and self.destroy == False:
frame_movement = 50 * delta_time
self.total_movement_x += frame_movement
if self.total_movement_x >= self.occlusion_width_max:
self.reverse = True
self.occlusions_cleared = True
else:
self.front_arms.pos[0] += frame_movement
self.back_arms.pos[0] += frame_movement
self.occlusion_width -= frame_movement
if self.occlusion_width < 1:
self.occlusion_width = 1
self.front_occlusion[0][0] -= frame_movement
self.back_occlusion[0][0] -= frame_movement
#self.front_arms.resize_occlusion(0, (self.occlusion_width+100, self.occlusion_height))
elif self.reverse == True and self.destroy == False:
frame_movement = -50 * delta_time
self.total_movement_x += frame_movement
if self.total_movement_x
Code zum Initialisieren und Aktualisieren von Grab Arms aus der Spielerklasse < /p>
#initalizing
if keys[pygame.K_e]:
for event in event_loop:
if event.type == pygame.KEYDOWN and event.key == 101 and self.movement_options['grab']== True:
self.grab_arms = grab_arms(self.pos, self.direction_animation, self.grab_arms_groups)
self.movement_options['grab'] = False
#updating
if self.grab_arms != None:
self.grab_arms.run(delta_time)
if self.grab_arms.destroy == True:
for group in self.grab_arms_groups:
if len(group) > 0:
group.pop(0)
self.grab_arms = None
self.movement_options['grab'] = True
< /code>
Code zum Zeichnen von Objekten in der Ebene der Ebene < /p>
def draw(self, display):
self.camera.update()
self.camera.draw_ui(display, self.back_sprites, self.wall_sprites, self.entity_sprites, self.front_sprites)
< /code>
Code für grundlegende Kamera -Rendering < /p>
def draw_ui(self, display, *sprites):
for sprite_groups in sprites:
for sprite in sprite_groups:
display.blit(sprite.surface, sprite.pos)
< /code>
Somethings, die ich ausprobiert habe, die alle den gleichen Effekt hatten, < /p>
Die Untergrundverwaltung transformiert, anstatt sie zu bewegen.>
Pygame Stottern/abgehackte Bildbewegung [Duplikat] ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post