Layer
➢is_event_handler= True
➢By Pyglet
from pyglet.window import key
on_key_press(key, modifiers)
on_key_release(key, modifiers)
on_mouse_motion(x, y, dx, dy)
on_mouse_press(x, y, buttons, modifiers)
on_mouse_drag(x, y, dx, dy, buttons, modifiers)
modifiers
: bitwise or of several constants indicating which modifiers are active at the time of the press (ctrl, shift, capslock, etc.)import cocos
from pyglet.window import key
class MainLayer(cocos.layer.Layer):
is_event_handler = True
def __init__(self):
super(MainLayer, self).__init__()
self.player = cocos.sprite.Sprite('ball.png')
self.player.position = (320, 240)
self.player.color = (0, 0, 255)
self.add(self.player) #layer에 player 추가
def on_key_press(self, k, m):
print('Pressed', key.symbol_string(k))
if __name__ == '__main__':
cocos.director.director.init(caption='Hello, Cocos')
layer = MainLayer()
scene = cocos.scene.Scene(layer) #씬에 layer 추가
cocos.director.director.run(scene)
CocosNode.schedule(callback)
-> The callback function is called on every frame
-> Unity에서 Update함수와 비슷한 역할로 매 프레임 마다 인자로 주어지는 함수를 호출한다. callback이 적힌 자리에 호출하고 싶은 함수의 이름을 적어 사용하면 된다.CocosNode.unschedule(callback)
-> cancel a timer
-> 아마도 스케쥴의 반대 의미로 callback을 멈춘다는 의미
def callback(dt, *args, **kwargs):
✅dt : 시간 차 (이전 함수가 call 되었을때와의 시간차)
📌상하좌우키로 공 움직이기
import cocos
from collections import defaultdict # for key dict
from pyglet.window import key
class MainLayer(cocos.layer.Layer):
is_event_handler = True
def __init__(self):
super(MainLayer, self).__init__()
self.player = cocos.sprite.Sprite('ball.png')
self.player.position = (320,240)
self.player.color = (255, 0, 0)
self.add(self.player)
self.speed = 100.0
self.pressed = defaultdict(int)
self.schedule(self.update) #✅매 frame마다 update
#파라미터 k에 해당하는 키가 눌리면 pressed dict에서 그 키값에 해당하는 값을 1로 변경
def on_key_press(self, k, m):
self.pressed[k] = 1
def on_key_release(self, k, m):
self.pressed[k] = 0
#📌Scene Updating
def update(self, dt):
x = self.pressed[key.RIGHT]-self.pressed[key.LEFT]
y = self.pressed[key.UP]-self.pressed[key.DOWN]
#공의 나중 위치 = 현재 위치 + 속도*이동거리
if x != 0 or y != 0:
pos = self.player.position
newX = pos[0] + self.speed*x*dt
newY = pos[1] + self.speed*y*dt
self.player.position = (newX, newY)
if __name__ == '__main__':
cocos.director.director.init(caption='Hello, Cocos')
layer = MainLayer()
scene = cocos.scene.Scene(layer)
cocos.director.director.run(scene)
📝docs
https://docs.cocos.com/creator/manual/en/scripting/scheduler.html