I'm learning to make hitbox collisions (instead of flags collisions).
Vertical collisions seem to work just fine but horizontals don't.
How can this be done?
Maybe hitbox collisions are just to complicated and shouldn't be used?
.
.
.
.
.
.
function _init()
pad_x=45
pad_y=45
pad_width=30
pad_height=30
pad_color=7
pad_speed=3
ball_x=80
ball_y=10
ball_radius=4
ball_color=8
ball_speed_x=2
ball_speed_y=2
end
function _update60()
btnprss=false
cls(1)
--ball movement
ball_x+=ball_speed_x
ball_y+=ball_speed_y
--ball-screen collision
if ball_x<0 or ball_x>128 then
ball_speed_x=-ball_speed_x
end
if ball_y<0 or ball_y>128 then
ball_speed_y=-ball_speed_y
end
--pad movement
if btn(0) then
btnprss=true
pad_speed=-5
end
if btn(1) then
btnprss=true
pad_speed=5
end
pad_x+=pad_speed
if btnprss==false then
pad_speed=pad_speed/2
end
if pad_x<1 or pad_x>126-pad_width then
pad_x=mid(1,pad_x,126-pad_width)
end
pad_color=7
if ball_box(pad_x,pad_y,pad_width,pad_height) then
pad_color=8
ball_speed_y=-ball_speed_y
end
end
function _draw()
rectfill(pad_x,pad_y,pad_x+pad_width,pad_y+pad_height,pad_color)
circfill(ball_x,ball_y,ball_radius,ball_color)
end
function ball_box(box_x,box_y,box_w,box_h)
--conditions where there are no collisions
if ball_y-ball_radius>box_y+box_h then
return false
end
if ball_y+ball_radius<box_y then
return false
end
if ball_x-ball_radius>box_x+box_w then
return false
end
if ball_x+ball_radius<box_x then
return false
end
return true
end
|
[Please log in to post a comment]




