У меня есть класс, который мяч отскакивает, когда она попадет в пределы экранаPygame Ellipse изменение цвета наехать
Я Покушение программирования ballchange моего цвета при столкновении с ограничениями, но это не меняет цвета, пребывание с значениями color_default и не меняться, я не хватает?
Вот код:
from pygame.sprite import Sprite
from pygame import Surface, draw, mouse
from GeneralInformation import R, G, B
class Ball(Sprite):
def __init__(self, display)#sorry for bad indent in this example
super(Ball, self).__init__()
self.elasticity = .8
self.radius = 30
self.friction = 1
self.image = Surface([self.radius*2, self.radius*2])
self.rect = self.image.get_rect()
self.rect.x = 100
self.rect.y = 100
self.dx = 0
self.dy = 0
self.color_default = (R+130, G-40, B-60)
self.color_change1 = (R-20, G+20, B+50)
self.color_change2 = (R-40, G+70, B+100)
self.display = display
self.delta_time = 0
self.pos_x_aux = 0
self.pos_y_aux = 0
self.controlled = False
def calculate_gravity(self):
"""Function for calcule the gravity"""
self.dy += .20
def impulse(self, dx, dy):
self.dx = dx
self.dy = dy
def update(self, dt):
self.calculate_gravity()
self.rect.x = self.rect.x + self.dx
self.rect.y = self.rect.y + self.dy
self.delta_time = self.delta_time + dt
if self.controlled:
self.rect.x = mouse.get_pos()[0] - self.radius
self.rect.y = mouse.get_pos()[1] - self.radius
if self.delta_time > 50:
self.pos_x_aux = mouse.get_pos()[0]
self.pos_y_aux = mouse.get_pos()[1]
self.delta_time = 0
if not self.controlled and self.pos_x_aux != 0 and self.pos_y_aux != 0:
self.dx = mouse.get_pos()[0] - self.pos_x_aux
self.dy = mouse.get_pos()[1] - self.pos_y_aux
self.pos_y_aux = 0
self.pos_x_aux = 0
self.check_collisions()
self.draw()
def check_collisions(self):
if self.rect.y + self.radius*2 > self.display.get_size()[1]:
self.rect.y = self.display.get_size()[1]-self.radius*2
self.impulse(self.dx, -self.dy*self.elasticity)
if self.rect.x + self.radius * 2 > self.display.get_size()[0]:
self.rect.x = self.display.get_size()[0] - self.radius * 2
self.impulse(-self.dx*self.elasticity, self.dy)
if self.rect.x < 0:
self.rect.x = 0
self.impulse(-self.dx*self.elasticity, self.dy)
if self.rect.y < 0:
self.rect.y = 0
self.impulse(-self.dy*self.elasticity, self.dx)
def draw(self):
draw.ellipse(self.display, self.color_default, self.rect)
if self.rect.y + self.radius * 2 > self.display.get_size()[1]:
draw.ellipse(self.display, self.color_change1, self.rect)
if self.rect.x + self.radius * 2 > self.display.get_size()[0]:
draw.ellipse(self.display, self.color_change2, self.rect)
if self.rect.x < 0:
draw.ellipse(self.display, self.color_change1, self.rect)
if self.rect.y < 0:
draw.ellipse(self.display, self.color_change2, self.rect)
С помощью этого кода я пытался следовать советам мне дает мне TypeError: draw.ellipse (self.display, self.current_color, self.rect) TypeError: Цвет недопустимого аргумент
# coding=utf-8
from pygame.sprite import Sprite
from pygame import Surface, draw, mouse
from GeneralInformation import R, G, B
class Ball(Sprite):
def __init__(self, display):
super(Ball, self).__init__()
self.elasticity = .8
self.radius = 30
self.friction = 1
self.image = Surface([self.radius*2, self.radius*2])
self.rect = self.image.get_rect()
self.rect.x = 100
self.rect.y = 100
self.current_color = []
self.dx = 0
self.dy = 0
self.color_default = [R+130, G-40, B-60]
self.color_change1 = [R-20, G+20, B+50]
self.color_change2 = [R-40, G+70, B+100]
self.display = display
self.delta_time = 0
self.pos_x_aux = 0
self.pos_y_aux = 0
self.controlled = False
def calculate_gravity(self):
"""Function for calcule the gravity"""
self.dy += .20
def impulse(self, dx, dy):
self.dx = dx
self.dy = dy
def update(self, dt):
self.calculate_gravity()
self.rect.x = self.rect.x + self.dx
self.rect.y = self.rect.y + self.dy
self.delta_time = self.delta_time + dt
if self.controlled:
self.rect.x = mouse.get_pos()[0] - self.radius
self.rect.y = mouse.get_pos()[1] - self.radius
if self.delta_time > 50:
self.pos_x_aux = mouse.get_pos()[0]
self.pos_y_aux = mouse.get_pos()[1]
self.delta_time = 0
if not self.controlled and self.pos_x_aux != 0 and self.pos_y_aux != 0:
self.dx = mouse.get_pos()[0] - self.pos_x_aux
self.dy = mouse.get_pos()[1] - self.pos_y_aux
self.pos_y_aux = 0
self.pos_x_aux = 0
self.check_collisions()
self.draw()
def check_collisions(self):
if self.rect.y + self.radius*2 > self.display.get_size()[1]:
self.rect.y = self.display.get_size()[1]-self.radius*2
self.impulse(self.dx, -self.dy*self.elasticity)
self.current_color.append(self.color_change1)
if self.rect.x + self.radius * 2 > self.display.get_size()[0]:
self.rect.x = self.display.get_size()[0] - self.radius * 2
self.impulse(-self.dx*self.elasticity, self.dy)
self.current_color.append(self.color_change2)
if self.rect.x < 0:
self.rect.x = 0
self.impulse(-self.dx*self.elasticity, self.dy)
self.current_color.append(self.color_change1)
if self.rect.y < 0:
self.rect.y = 0
self.impulse(-self.dy*self.elasticity, self.dx)
self.current_color.append(self.color_change2)
def draw(self):
"""Draw"""
draw.ellipse(self.display, self.color_default, self.rect)
if not self.check_collisions():
draw.ellipse(self.display, self.current_color, self.rect)
""""if self.rect.y + self.radius * 2 > self.display.get_size()[1]:
draw.ellipse(self.display, self.color_change1, self.rect)
if self.rect.x + self.radius * 2 > self.display.get_size()[0]:
draw.ellipse(self.display, self.color_change2, self.rect)
if self.rect.x < 0:
draw.ellipse(self.display, self.color_change1, self.rect)
if self.rect.y < 0:
draw.ellipse(self.display, self.color_change2, self.rect)"""
Была проблема с отступом - см. Отредактированный. Когда вы вызываете draw.eclipse, и все ваши методы класса должным образом отступы, все равно создает проблему? – dmitryro
В моем PyCharm все хорошо отступы, но у меня проблема с отступом в Stackoverflow, программа запускается, но не меняет цвет при столкновении объекта, было бы хорошей идеей показать код Main.py? –
дать все в определении класса еще 4 отступов. Проблема заключается в том, что вы создаете свой цвет изначально как кортеж, а кортежи неизменяемы в python, поэтому для установки цвета используйте другую структуру данных. – dmitryro