문제
필터를 이용하여 얻을 입력 IUP 작은 테이블 게임.내가 원하는 몇 가지를 시도하는 입력을 시도했 코드의 일부와 함께 제공되는 IUPGL 예,그러나 입력하지 않는 것 같할 수 있습니다.여기에는 코드는 그대로 지금까지:
require "iuplua"
require "iupluagl"
require "luagl"
paddle = {x = -0.9, y = 0.2}
function drawPaddle(x, y)
gl.Begin(gl.QUADS)
gl.Color(0.0, 0.5, 0.0)
gl.Vertex(x, y)
gl.Vertex(x + 0.1, y)
gl.Vertex(x + 0.1, y - 0.4)
gl.Vertex(x, y - 0.4)
end
canvas = iup.glcanvas{buffer = "DOUBLE", rastersize = "300x300"}
function canvas:action(x, y)
iup.GLMakeCurrent(self)
gl.ClearColor(0.0, 0.0, 0.0, 0.0)
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.Clear(gl.DEPTH_BUFFER_BIT)
gl.MatrixMode(gl.PROJECTION)
gl.Viewport(0, 0, 300, 300)
gl.LoadIdentity()
drawPaddle(paddle.x, paddle.y)
gl.End()
iup.GLSwapBuffers(self)
end
window = iup.dialog{canvas, title = "Soon to be Pong"}
function canvas:k_any(c)
if c == iup.K_q then
return iup.CLOSE
elseif c == iup.K_w then
paddle.y = paddle.y + 0.02
return iup.CONTINUE
else
return iup.DEFAULT
end
end
window:show()
iup.MainLoop()
그것은 나의 이해 canvas:k_any()
라 키를 누를 때,하지만 그것은 응답하지 않을 종료한 명령입니다.어떤 아이디어가?
해결책
여기에 적어도 문제의 일부에 대해 샘플을 따옴표로 묶어서는 안 됩니다.전 IUP 키 상수는 실제로 정의에서 당신의 iup
테이블,당신을 호출해야 함.아이디어는 메모리 사용량이 낮지 않는 경우에 필요한 모든 키 이름,이는 많은 응용 프로그램을 수행 할 수 있습니다 완전히 없습니다.
하려고 다음과 같은 줄을 추가하여 언젠가 곧 후 require "iuplua"
고 사용하기 전에 이름에서 모든 코드:
iup.key_open() -- load key names
이것은 문서화 근처의 최고의 항목 키 코드 뿐만 아니라 다양한 장소에 관련된 키보드입니다.
없이 전화기 iup.key_open()
, iup.K_q
가 nil
(로 다른 키 이름이)그리고 따라서 자동으로 결코 일치하는 키 코드에 전달된 canvas:k_any()
.
편집: 나는 당신의 견본,그리고 실제로 전화 iup.key_open()
인 q w 키을 인식한다.당신은 더욱 결함을 알 수 있 다음에는 그냥 업데이트 패드의 위치에 대 한 요청 하지 않은 캔버스를 다시 그리기.제가 떠날 것으로 운동으로 앞으로 이동합니다.
Edit2: 줄을 추가하여 iup.Update(self)
기능 canvas:k_any()
그냥을 수정한 후에는 국가의 패 나타납하이 무엇을 원합니다.그것을 하는 방식이 아닌 수동으로 전화 action()
방법의 장점과 상호 작용 IUP 의 메시지가 반복 처리가 예상되는 방법입니다.일반적인 경우에,전화 iup.UpdateChildren(window)
대신될 것입니다.유지하는 것 다른 IUP 컨트롤 표시되는 대화 상자에서 업데이트뿐만 아니라,캔버스에 유용할 수 있는 경우는 컨트롤하지 않는 모든 자신의 업데이트를 내부적으로 합니다.
또한,이동할 수 있습니다 그리 루틴으로 자라는 기능 모두에서 k_any()
고 action()
방법은 캔버스입니다.나이는 일반적으로 조절되지 않을 할 때뿐만 아니라 당신이 지원하려는 여러 뷰포트 또는 관련 제어합니다.
할 수 있습을 재배열의 논리 k_any()
handler 그래서 당신은 가능성이 적은 잊어버리고 전화 iup.Update()
으로 추가할 경우 새로운 키를 사용합니다.