Jump to content
IGNORED

Help with collision detection with pfscroll


Captain Spazer

Recommended Posts

Im experimenting with a platformer with a 4 way scrolling level, i got collision detection working well left and right, and I can do collision for hitting a roof, but not floors, whatever I do, when touching the floor the player zips along the ground. Is there a simple solution I'm not seeing?

 

the idea is you got a helicopter on your back, holding down the firebutton makes you fly, releasing it makes you fall down

 rem Generated 24-01-2019 14:19:54 by Visual bB Version 1.0.0.568
 rem **********************************
 rem *<filename>                      *
 rem *<description>                   *
 rem *<author>                        *
 rem *<contact info>                  *
 rem *<license>                       *
 rem **********************************


 player0y = 79
 player0x = 50



 playfield:
 ................................
 ................................
 X...XXXXXXXXXXXXXXXXXXXXXXXXXXXX
 ................................
 ................................
 ................................
 ................................
 ................................
 .....................X..........
 ....................XX..........
 XXXXXXXXXXXXXXXXXX..XXXXXXXXXXXX
end






main
 COLUPF = $0E
 COLUP0 = $0E


 player0:
 %00001100
 %00001000
 %00001000
 %00111100
 %00111000
 %00100110
 %00100110
 %01110000
end




 drawscreen

 if b = 0 && collision(player0,playfield) then pfscroll left
 if b = 1 && collision(player0,playfield) then pfscroll right

 if joy0left then pfscroll right : b = 0
 if joy0right then pfscroll left : b = 1

 if joy0fire then pfscroll down

 if !joy0fire then pfscroll up

 if collision(player0,playfield) then pfscroll down

 goto main


Link to comment
Share on other sites

Thank you, very interesting. I managed to get it working better, you no longer slide all over the place. Your demo is very helpful.

 

edits made:

 rem Generated 25-01-2019 13:47:00 by Visual bB Version 1.0.0.568
 rem **********************************
 rem *<filename>                      *
 rem *<description>                   *
 rem *<author>                        *
 rem *<contact info>                  *
 rem *<license>                       *
 rem **********************************

 player0x = 50 : player0y = 50


 playfield:
 ................................
 ................................
 ..........XXX...................
 ...........X....................
 ................................
 ......................XXXXXXX...
 .......................XX.XX....
 ......XXXXXXX...........X.......
 .......X.XXX....................
 ..........X.....................
 ................................
end






main
 COLUP0 = $0E

 COLUPF = $0E




  if d = 10 then player0:
 %00011000
 %00010000
 %00010000
 %01111000
 %01110000
 %00011000
 %00100000
 %00011000
end

 if d = 20 then player0:
 %01001100
 %01111000
 %00010000
 %01111000
 %01110000
 %00011000
 %00100000
 %00011000
end



 if c = 10 then player0:
 %00011000
 %00010000
 %00010000
 %01111000
 %01110000
 %00011000
 %00100000
 %00011000
end

 if c = 20 then player0:
 %00011000
 %01010000
 %00010000
 %01111000
 %01110000
 %00011000
 %00100000
 %00011000
end



 drawscreen

 rem if a = 0 then fall
 rem if a = 1 then fly
 rem if a = 2 then land on floor
 rem if a = 3 player hits the roof

 if a = then pfscroll up
 if !joy0up then a = 0
 if a = 0 && collision(player0,playfield) then a = 2
 if a = 2 then pfscroll down : b = 0 : d = 0

 rem fly animation
 if a = 1 then c = c + 1
 if a = 0 then c = c + 1
 if c > 20 then c = 0

 rem walk animation

 if a = 1 then pfscroll down
 if joy0up then a = 1
 
 if a = 1 && collision(player0,playfield) then a = 3
 if a = 3 then pfscroll down

 if b = 1 && collision(player0,playfield) then pfscroll left
 if b = 2 && collision(player0,playfield) then pfscroll right


 if joy0left && a = 0 then pfscroll right : b = 1 : e = 1
 if joy0right && a = 0 then pfscroll left : b = 2 : e = 0

 if joy0left && a = 1 then pfscroll right : b = 1 : e = 1
 if joy0right && a = 1 then pfscroll left : b = 2 : e = 0

 rem flip player sprite
 if e = 1 then REFP0 = 8
 if e = 0 then REFP0 = 0

 goto main


Edited by Captain Spazer
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...