love2d - love.physics / love.body / сетка

Здравствуйте, я играю с Lua / Love2D и хочу знать, можно ли использовать сетку и love.body вместе. Я хотел создать и протестировать сетки, а также создать мир = love.physics.newWorld, чтобы установить гравитацию 0, 0 и использовать love.body: applyForce, чтобы придать ему ощущение пространства.

Так что прямо сейчас у меня есть игрок

<code>
  player = {}
    player.gridx = 64
player.gridy = 64
player.acty = 200
player.speed = 32
</code>

Поскольку я использую сетку, я также хотел бы добавить

  <code>
world = love.physics.newWorld(0, 0, true)

   In   love.load()
  </code>

А потом в классе игроков

 <code>
 player = {}
  player.body = love.physics.newBody(world, 200, 550, "dynamic")
  player.body:setMass(100) -- make it pretty light
  player.shape = love.physics.newRectangleShape(0, 0, 30, 15)
  player.fixture = love.physics.newFixture(player.body, player.shape, 2) 
  player.fixture:setRestitution(0.4)    -- make it bouncy
</code>

а затем используйте

<code>
 if love.keyboard.isDown("right") then
 player.body:applyForce(10, 0.0)
 print("moving right")
 elseif love.keyboard.isDown("left") then
 player.body:applyForce(-10, 0.0)
 print("moving left")
 end
if love.keyboard.isDown("up") then
player.body:applyForce(0, -500)
elseif love.keyboard.isDown("down") then
player.body:applyForce(0, 100)
end
</code>

Вместо

<code>
  function love.keypressed(key)

  if key == "up" then
    if testMap(0, -1) then
        player.gridy = player.gridy - 32
    end
 elseif key == "down" then
    if testMap(0, 1) then
        player.gridy = player.gridy + 32
     end
   elseif key == "left" then
    if testMap(-1, 0) then
        player.gridx = player.gridx - 32
    end
  elseif key == "right" then
    if testMap(1, 0) then
        player.gridx = player.gridx + 32
    end
  end
 end
</code>

person user2875208    schedule 13.10.2013    source источник
comment
Мне непонятно, чего нельзя делать. Вы говорите, что хотите использовать физику Box2d, но перемещаться только по незаметным сеткам? Или что-то другое   -  person Alex    schedule 14.10.2013


Ответы (1)


Вы абсолютно можете!

У меня такое чувство, что вы хотите отобразить тело (в данном случае спрайт вашего игрока), на которое влияет физика?

Если это так, то в блоке love.draw просто используйте player.body.getY () и player.body.getY () при рисовании квадрата / сетки.

Ex:

function love.draw()
     love.graphics.circle( "fill", player.body:getX(), player.body:getY(), 50, 100 )

Рисовал бы мяч на экране, на который влияет физический движок.

В качестве альтернативы вы можете спросить о переводе мировых координат. то есть: вы хотите сказать 64, 64 вместо использования координат BOX2D, и в этом случае посмотрите на метод getWorldPoint:

(https://www.love2d.org/wiki/Body:getWorldPoint)

person JoshJ    schedule 18.01.2014