ゲーム用のボタン クラスを作成しようとしています。背景は白、文字は黒です。押したときに反転させたい。
問題は、描画イベントが色を設定し、enterFrame ごとに描画イベントを呼び出すため、描画イベントがタッチ イベントに干渉することです。画面がタッチされているかどうか、および enterFrame イベント内でタッチされている場所をテストできれば問題は解決しますが、これらをテストする唯一の方法は touch イベント内です。
どうすれば反転できますか?
これが私のコードです:
--Button Class
local button = {}
local button_mt = { __index = button } -- metatable
--button.new function
function button.new (x, y, width, height, text) -- constructor
local newButton = {
x = x,
y = y,
width = width,
height = height,
text = text,
rect = display.newRoundedRect (x-width/2, y-height/2, width, height, 10),
displayText = display.newText (text, x, y, native.systemFont, 16),
inverted = false,
timer = 5
};
return setmetatable( newButton, button_mt );
end
--Button activate function
function button:activate()
self.rect:addEventListener ("touch", self);
self.displayText:setTextColor (0, 0, 0);
end
--Button touch event
function button:touch (event)
if event.phase == "ended" or event.phase == "cancelled" then
self.inverted = false;
else
self.inverted = true;
end
end
--Button draw function
function button:draw()
self.displayText.x = self.x;
self.displayText.y = self.y;
self.rect.x = self.x;
self.rect.y = self.y;
self.rect.width = self.width;
self.rect.height = self.height;
self.displayText.text = self.text;
if self.inverted then
self.displayText:setTextColor (255, 255, 255);
self.rect:setFillColor (0, 0, 0);
else
self.displayText:setTextColor (0, 0, 0);
self.rect:setFillColor (255, 255, 255);
end
end
return button;
編集:わかりました、私はどこかに着いていますが、逆さまに保つために指を動かさなければなりません
これでほぼ取れました。ボタンは反転して元に戻りますが、ボタンに触れて指を離さずにボタンから指をスライドさせると、反転したままになります。