0

これは、ジャンプ中の love2d の私のキャラクターです。見た目はいいけど..

これはlove2dの私のキャラクターです

地上に出るとこんな感じ。

ここに画像の説明を入力

正方形全体を埋めていないという、img と関係がある可能性があることがわかりました。したがって、それは単純に衝突正方形から外れています。

ここに画像の説明を入力

それはそれがあったはずの正方形ですが、私はプログラミングにまったく慣れていないので、それを行う方法を理解できません。解決策を探していますが、ATM が 1 つ見つかりません。

これは私の愛です。

function love.load()
love.graphics.setBackgroundColor( 204, 255, 204 )
crazy = love.graphics.newImage("player.png")
pwidth = crazy.getWidth
pheight = crazy.getHeight


AdvTiledLoader.path = "maps/"
map = AdvTiledLoader.load("map.tmx")
map:setDrawRange(0, 0, map.width * map.tileWidth, map.height * map.tileHeight)

camera:setBounds(0, 0, map.width * map.tileWidth - love.graphics.getWidth(), map.height * map.tileHeight - love.graphics.getHeight() )

world =     {
            gravity = 1536,
            ground = 512,
            }

player =    {
            x = 256,
            y = 256,
            x_vel = 0,
            y_vel = 0,
            jump_vel = -1024,
            speed = 512,
            flySpeed = 700,
            state = "",
            h = 32,
            w = 32,
            standing = false,
            }
function player:jump()
    if self.standing then
        self.y_vel = self.jump_vel
        self.standing = false
    end
end

function player:right()
    self.x_vel = self.speed
end

function player:left()
    self.x_vel = -1 * (self.speed)
end

function player:stop()
    self.x_vel = 0
end

function player:collide(event)
    if event == "floor" then
        self.y_vel = 0
        self.standing = true
    end
    if event == "cieling" then
        self.y_vel = 0
    end
end

そして私の愛。

function love.draw()
camera:set()

love.graphics.draw(crazy, player.x , player.y)


love.graphics.setColor( 255, 255, 255 )
map:draw()

camera:unset()
end

私の衝突やその他のものを見る必要がある場合は、質問してください。下に貼り付けます:)

私は本当にあなたの助けに感謝します!

4

2 に答える 2

1

発生する可能性が最も高いのは、スプライトの中心として x、y 座標があることです。そのため、マップが中心に達すると停止します。

マップの前にスプライトを描画しているため、マップでカバーされていないビットのみが表示されます。

これを証明する簡単な方法は、マップの後にスプライトを描画することです。マップ上にスプライト全体が表示されるはずです。

これを解決するにはいくつかの方法があります。衝突をそのままにして、ox=-width/2,oy=-height/2 でスプライトを描画します。

または、衝突ポイントに width/2 と height/2 を追加して、スプライトの下部に衝突を発生させます。

これで解決しない場合は、おそらく衝突ロジックが必要になります。

于 2013-11-10T20:08:14.427 に答える
0

まず第一に、get 関数ではなく、pwidth/pheight を数値にしたいと思います。

pwidth = crazy.getWidth()
pheight = crazy.getHeight()

画像は左上隅から描かれていますが、衝突ロジックではヒットボックスがプレイヤーの位置の中心にあると推測しています。

描画関数の座標を変更して補正するか、画像に原点オフセットを渡すことができます。原点オフセットを指定する利点は、その原点を基準にして回転およびスケーリングできることです。

love.graphics.draw(crazy, player.x - pwidth/2 , player.y - pheight/2)

また

rotation, scalex, scaley = 0, 1, 1
love.graphics.draw(crazy, player.x, player.y, rotation, scalex, scaley, pwidth/2, pheight/2)
于 2015-03-09T10:12:49.660 に答える