Monday 15 June 2015

python - Object defined using classes is not inheriting color property Kivy -



python - Object defined using classes is not inheriting color property Kivy -

i'm attempting larn how utilize kivy , followed pong tutorial. now, i'm trying create own altering code in ways. @ moment, trying create pong paddles alter color.

i have gotten 1 of them so, other, phone call using same class, not.

class pongpaddle(widget): score = numericproperty(0) def bounce_ball(self, ball): if self.collide_widget(ball): vx, vy = ball.velocity offset = (ball.center_y - self.center_y) / (self.height /2) bounced = vector(-1 * vx , vy) vel = bounced * 1.1 ball.velocity = vel.x, vel.y + offset def on_touch_down(self, touch): color = (random(), random(), random()) self.canvas: color(*color) class pongball(widget): #velocity of ball on x , y axis velocity_x = numericproperty(0) velocity_y = numericproperty(0) #shorthand referencelist velocity = referencelistproperty(velocity_x, velocity_y) #used ball movement. def move(self): self.pos = vector(*self.velocity) + self.pos class ponggame(widget): ball = objectproperty(none) player1 = objectproperty(none) player2 = objectproperty(none) def __init__(self, **kwargs): super(ponggame, self).__init__(**kwargs) self._keyboard = window.request_keyboard(self._keyboard_closed, self) self._keyboard.bind(on_key_down=self._on_keyboard_down) def _keyboard_closed(self): self.keyboard.unbind(on_key_down=self._on_keyboard_down) self._keyboard = none def _on_keyboard_down(self, keyboard, keycode, text, modifiers): if keycode[1] == 'w': self.player1.center_y += 10 elif keycode[1] == 's': self.player1.center_y -= 10 elif keycode[1] == 'k': self.player2.center_y += 10 elif keycode[1] == 'l': self.player2.center_y -= 10 homecoming true def serve_ball(self, vel=(4, 0)): self.ball.center = self.center self.ball.velocity = vel def update(self, dt): self.ball.move() self.player1.bounce_ball(self.ball) self.player2.bounce_ball(self.ball) #bounce ball if (self.ball.y < 0) or (self.ball.top > self.height): self.ball.velocity_y *= -1 #scoring if self.ball.x < self.x: self.player2.score += 1 self.serve_ball(vel=(4, 0)) if self.ball.x > self.width: self.player1.score += 1 self.serve_ball(vel=(-4, 0)) def on_touch_move(self, touch): if touch.x < self.width / 3: self.player1.center_y = touch.y if touch.x > self.width - self.width / 3: self.player2.center_y = touch.y class pongapp(app): def build(self): game = ponggame() game.serve_ball() clock.schedule_interval(game.update, 1.0/60.0) homecoming game if __name__ == '__main__': pongapp().run()

and accompanying kv language file.

#:kivy 1.8.0 <pongball>: size: 50, 50 canvas: ellipse: pos: self.pos size: self.size <pongpaddle>: size: 25, 200 canvas: rectangle: pos: self.pos size: self.size <ponggame>: ball: pong_ball player1: player_left player2: player_right canvas: rectangle: pos: self.center_x - 5, 0 size: 10, self.height label: font_size: 70 center_x: root.width / 4 top: root.top - 50 text: str(root.player1.score) label: font_size: 70 center_x: root.width * 3 / 4 text: str(root.player2.score) pongball: id: pong_ball center: self.parent.center pongpaddle: id: player_left x: root.x center_y: root.center_y pongpaddle: id: player_right x: root.width-self.width center_y: root.center_y

any thought why paddle on left not changing color?

if no color declared before drawing on canvas, color instructions defaults (1,1,1,1) white. when use:

with self.canvas: color(*color)

you changing color of objects drawn after declaring new color. looking @ kv file:

label: font_size: 70 center_x: root.width / 4 top: root.top - 50 text: str(root.player1.score) label: font_size: 70 center_x: root.width * 3 / 4 text: str(root.player2.score) pongball: id: pong_ball center: self.parent.center pongpaddle: id: player_left x: root.x center_y: root.center_y pongpaddle: id: player_right x: root.width-self.width center_y: root.center_y

the color instructions added canvas after drawing player_left used widgets drawn after declaring color(player_right). alter pong paddle's on_touch_down function next see how color used canvas :

def on_touch_down(self, touch): color = (random(), random(), random()) self.canvas: color(*color) rectangle(size=(self.width-5,self.height-5),pos=self.pos)

you notice first rectangle(on top of left paddle) , right paddle same color. sec color used draw sec rectangle on top of right paddle. if want add together instructions before executing main ones, can use:

with self.canvas.before: color(*color)

python kivy

No comments:

Post a Comment