문제

필터를 이용하여 얻을 입력 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_qnil (로 다른 키 이름이)그리고 따라서 자동으로 결코 일치하는 키 코드에 전달된 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() 으로 추가할 경우 새로운 키를 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top