KeypadManager.lua
2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
cc.exports.KeypadManager = class("KeypadManager")
local keyEventsMapping = {
back = "onKeypadBack",
menu = "onKeypadMenu",
left = "onKeypadLeft",
right = "onKeypadRight",
up = "onKeypadUp",
down = "onKeypadDown",
ok = "onKeypadOk"
}
function KeypadManager:ctor(scene)
self.keypadReceivers = {};
self.keypadReceivers[#self.keypadReceivers+1] = scene;
local eventDispatch = scene:getEventDispatcher()
local key_listener = cc.EventListenerKeyboard:create()
key_listener:registerScriptHandler(handler(self,self.keyReleasedHandler),cc.Handler.EVENT_KEYBOARD_RELEASED)
eventDispatch:addEventListenerWithSceneGraphPriority(key_listener,scene);
end
function KeypadManager:keyReleasedHandler(keyCode, event)
-- local targetPlatform = cc.Application:getInstance():getTargetPlatform();
-- if targetPlatform == cc.PLATFORM_OS_ANDROID then
-- logUI("keycode:"..keyCode.." keycodekey:"..cc.KeyCodeKey[keyCode+1]);
-- end
local receiver = self.keypadReceivers[#self.keypadReceivers];
if not receiver then
return;
end
local keyname = "";
if keyCode == cc.KeyCode.KEY_BACK or keyCode == cc.KeyCode.KEY_ESCAPE then
keyname = "back";
elseif keyCode == cc.KeyCode.KEY_KP_ENTER or keyCode == cc.KeyCode.KEY_DPAD_CENTER or keyCode == cc.KeyCode.KEY_ENTER then
keyname = "ok";
elseif keyCode == cc.KeyCode.KEY_LEFT_ARROW or keyCode == cc.KeyCode.KEY_DPAD_LEFT then
keyname = "left";
elseif keyCode == cc.KeyCode.KEY_RIGHT_ARROW or keyCode == cc.KeyCode.KEY_DPAD_RIGHT then
keyname = "right";
elseif keyCode == cc.KeyCode.KEY_UP_ARROW or keyCode == cc.KeyCode.KEY_DPAD_UP then
keyname = "up";
elseif keyCode == cc.KeyCode.KEY_DOWN_ARROW or keyCode == cc.KeyCode.KEY_DPAD_DOWN then
keyname = "down";
elseif keyCode == cc.KeyCode.KEY_MENU then
keyname = "menu";
end
if not keyEventsMapping[keyname] then
print("invalid eventcode:"..keyCode);
return;
end
local fname = keyEventsMapping[keyname];
local fn = receiver[fname];
if fn then
fn(receiver);
end
end
function KeypadManager:addKeypadReceiver(receiver)
for i=#self.keypadReceivers,1,-1 do
if self.keypadReceivers[i] == receiver then
table.remove(self.keypadReceivers,i);
end
end
self.keypadReceivers[#self.keypadReceivers+1] = receiver;
end
function KeypadManager:removeKeypadReceiver(receiver)
for i=#self.keypadReceivers,1,-1 do
if self.keypadReceivers[i] == receiver then
table.remove(self.keypadReceivers,i);
end
end
end
return KeypadManager