Problème actualisation kivy
Bonjour,
J'ai un problème avec mon code kivy. Tous mes print marchent, sauf celui de collision qui devrait en pratique marcher. J'ai l'impression que ma page ne se réactualise pas étant donner que right et left marchent.
import kivy
import random
import time
from kivy.app import App
from kivy.animation import Animation
from kivy.clock import Clock
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.properties import (
NumericProperty, ReferenceListProperty, ObjectProperty
)
from kivy.uix.button import ButtonBehavior
from kivy.uix.image import Image
from kivy.uix.label import Label
from kivy.uix.screenmanager import Screen, FadeTransition
from kivy.uix.widget import Widget
from kivy.vector import Vector
class ImageButton(ButtonBehavior, Image):
pass
class Home(Screen):
pass
class Player():
def __init__(self):
self.life=3
self.point=0
def add_point(self):
self.point += 1
def supp_life(self):
self.life -= 1
class Game(Screen):
def __init__(self, **kwargs):
super(Game, self).__init__(**kwargs)
self._keyboard = Window.request_keyboard(self._keyboard_closed, self)
self._keyboard.bind(on_key_down=self._on_keyboard_down)
self.player = Player()
Clock.schedule_interval(self.Select_image, 1)
Clock.schedule_interval(self.update, 1.0 / 60.0)
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] in ['left', 'right']:
if keycode[1] == 'left':
print("left")
self.ids.mon_widget.x -= 30
elif keycode[1] == 'right':
print("right")
self.ids.mon_widget.x += 30
return True
def Animate_image(self, rand_image):
anim = Animation(y = -2000, duration = 3)
anim.start(rand_image)
print("imageanim")
def Select_image(self, dt):
image_list = [self.ids.egg, self.ids.canette]
rand_image = image_list[random.randint(0,1)]
self.Animate_image(rand_image)
def update(self,dt):
if self.player.life > 0:
if self.ids.egg.collide_widget(self.ids.mon_widget):
print("collide")
self.player.supp_life()
lead = Builder.load_file("main.kv")
class Ecogame(App):
def build(self):
self.game = Game()
return lead
def change_screen(self, screen_name):
screen_manager = self.root.ids['screen_manager']
screen_manager.transition = FadeTransition()
screen_manager.current = screen_name
Ecogame().run()
Main.kv
#:kivy 1.0.9
#:include home.kv
#:include game.kv
GridLayout:
cols: 1
ScreenManager:
id: screen_manager
Home:
name: "home"
id: home
Game:
name: "game"
id: game
game.kv:
<Game>:
canvas.before:
Color:
rgba: 0.961, 0.937, 0.831, 1
Rectangle:
pos: self.pos
size: self.size
FloatLayout:
Image:
id: mon_widget
pos_hint: {"center_x": 0.5, "center_y": 0.05 }
source: "poubelle1.png"
size_hint: 0.3, .2
Image:
id: egg
pos_hint: {"center_x": 0.5, "center_y": 0.5 }
size_hint: 0.3,0.3
source: "egg.png"
Image:
id: canette
pos_hint: {"center_x": 0.5, "center_y": 0.5 }
size_hint: 0.3,0.3
source: "canette.png"
home.kv :
<Home>:
canvas.before:
Color:
rgba: 0.298, 0.424, 0.325, 1
Rectangle:
pos: self.pos
size: self.size
FloatLayout:
GridLayout:
rows: 1
pos_hint: {"center_x": 0.5, "center_y": 0.5 }
size_hint: 1, .2
ImageButton:
source: "play.png"
id: play_image
pos_hint: {'center_x': 0.5, 'center_y': 0.5 }
size_hint: 1, 1
on_release: app.change_screen("game")
Merci beaucoup d'avance
Bonne soirée
A voir également:
- Problème actualisation kivy
- Bouton d'actualisation sur smartphone - Forum Samsung
- Actualisation automatique excel ✓ - Forum Excel
- Désactiver actualisation automatique chrome - Forum Réseaux sociaux
- Probleme grindr impossible d'actualiser ✓ - Forum Instagram
- Grindr probleme actualisation - Forum Instagram
1 réponse
Bonjour,
Veille à partager tes extraits de code comme expliqué ici.
J'ai essayé de remettre en forme (et réindenter) ton code mais je ne sais pas si c'est exactement ce que tu as. Merci de contrôler et de corriger ton message initial si besoin.
En admettant que ce soit bien :
if self.player.life > 0:
if self.ids.egg.collide_widget(self.ids.mon_widget):
print("collide")
Il faudrait commencer par s'assurer que la vie est positive (rajoute un print ?). Si ça n'est pas ça il faudrait vérifier les arguments passés à collide_widget.
Bonne chance