----------------------------------- recneps Thu Feb 19, 2004 5:45 pm Help with Sidescroller Game (Jumping specifically) ----------------------------------- Ok, im gonna try to make a "mario style" game where its sidescroller and you can jump and such. Anyways, i cant figure out a way to get the person to jump and it look ok. Can anyone suggest something? heres what ive got. (Its really craptacular.) var bulletx, bullety, x, y : int bulletx := 0 bullety := 0 x := 25 y := 50 var keys : array char of boolean var right : char := chr (205) var left : char := chr (203) var space : char := chr (32) var enter : char := chr (10) var esc : char := chr (26) var bulletmove, movex, movey : int movex := 0 movey := 0 bulletmove := 0 var show := false put "Use arrow keys to move, Space to jump, and enter to shoot." delay(1000) cls setscreen ("offscreenonly") loop if show = true then drawfilloval (bulletx, bullety, 2, 2, 7) end if if bulletx > maxx then show := false end if drawoval (x, y, 10, 10, 7) Input.KeyDown (keys) if keys (right) then if y > 50 then movex := 0 movex := movex + 2 else movex := 0 x := x + 5 end if elsif keys (left) then if y > 50 then movex := 0 movex := movex - 2 else movex := 0 x := x - 5 end if elsif keys (space) then if y = 50 then movey := 0 movey := movey + 5 end if elsif keys (enter) then bulletx := x + 5 bullety := y show := true end if if y > 200 then movey := -movey elsif y < 50 then y := 50 movey := 0 movex := 0 end if if x < 0 then x := 0 elsif x > maxx then x := maxx end if y := movey + y x := movex + x delay (25) bulletx := bulletx + 5 View.Update cls exit when keys (esc) end loop ----------------------------------- Tony Thu Feb 19, 2004 5:51 pm ----------------------------------- to make it look "ok" you got to make it jump in a parabula shape, not in straight lines. Meaning you would need to jump using negative acceleration. or what do you mean? :? ----------------------------------- Paul Thu Feb 19, 2004 7:46 pm ----------------------------------- Alot of games jump like that, mario also jumps straight up when your not moving. But I think you have to work on getting it to move then jump, like holding the right arrow, then at the same time jump. There it would look like a parabola. ----------------------------------- poly Thu Feb 19, 2004 7:54 pm ----------------------------------- like holding the right arrow, then at the same time jump. There it would look like a parabola. was gonna say something pretty similiar... anyway its looking great, just get the images in there and wala ----------------------------------- Cervantes Thu Feb 19, 2004 8:24 pm ----------------------------------- you fail paul :p A parabala would be an arc. What you are talking about (jumping like he has it in that code while moving forward) would be a triangle __/\__ ^marios movement :P Here's how Homer has done it! type player_t : record x, y, w, v, t : real end record var player_1 : player_t player_1.x := 100 player_1.y := 100 player_1.v := 50 player_1.w := 10 player_1.t := 0 var bjump_1 := false procedure Jump (var obj : player_t) obj.y := (obj.v * sind (90) * obj.t - (obj.w) * obj.t ** 2 / 2) + 100 obj.t += .1 end Jump var chars : array char of boolean setscreen ("offscreenonly") loop if bjump_1 then Jump (player_1) if player_1.y < 100 then bjump_1 := false player_1.t := 0 player_1.y := 100 end if end if Input.KeyDown (chars) if chars (KEY_UP_ARROW) then bjump_1 := true end if drawfilloval (round (player_1.x), round (player_1.y), 30, 30, 9) View.Update delay (10) drawfilloval (round (player_1.x), round (player_1.y), 30, 30, white) end loop ----------------------------------- Paul Thu Feb 19, 2004 8:31 pm ----------------------------------- Hmm, would the jumping in Worms be like a parabola? I remeber playing Super Mario World 3 on SNES, and it kinda looked like a sharp parabola, hard to distinguish though. ----------------------------------- Cervantes Fri Feb 20, 2004 4:34 pm ----------------------------------- you can always just do it the cheap way and have a series of steps for the jump. var objy : int := 100 proc draw drawfilloval (100, objy, 20, 20, black) View.Update delay (5) drawfilloval (100, objy, 20, 20, white) end draw proc jump for i : 1 .. 12 objy += 5 draw end for for i : 1 .. 10 objy += 4 draw end for for i : 1 .. 8 objy += 3 draw end for for i : 1 .. 6 objy += 2 draw end for for i : 1 .. 4 objy += 1 draw end for for i : 1 .. 2 objy += 0 draw end for for i : 1 .. 4 objy -= 1 draw end for for i : 1 .. 6 objy -= 2 draw end for for i : 1 .. 8 objy -= 3 draw end for for i : 1 .. 10 objy -= 4 draw end for for i : 1 .. 12 objy -= 5 draw end for end jump setscreen ("offscreenonly") loop jump end loop Works very well actually. it does take a lot of code though :think: ----------------------------------- recneps Fri Feb 20, 2004 4:40 pm ----------------------------------- Ok, now that someone showed me that jump code (that i understand about half of :D) can someone suggest a way to make it move a bit more realistically? :D type player_t : record x, y, w, v, t : real end record var player_1 : player_t player_1.x := 100 player_1.y := 100 player_1.v := 50 player_1.w := 10 player_1.t := 0 var bjump_1 := false procedure Jump (var obj : player_t) obj.y := (obj.v * sind (90) * obj.t - (obj.w) * obj.t ** 2 / 2) + 100 obj.t += .1 end Jump var chars : array char of boolean setscreen ("offscreenonly") loop if bjump_1 then Jump (player_1) if player_1.y < 100 then bjump_1 := false player_1.t := 0 player_1.y := 100 end if end if Input.KeyDown (chars) if chars (KEY_UP_ARROW) then bjump_1 := true end if if chars (KEY_RIGHT_ARROW) then player_1.x += 5 elsif chars (KEY_LEFT_ARROW) then player_1.x -= 5 end if if player_1.x > maxx - 30 then player_1.x := maxx - 30 elsif player_1.x < 0 + 30 then player_1.x := 0 + 30 end if if chars (chr(27)) then return end if drawfilloval (round (player_1.x), round (player_1.y), 30, 30, 9) View.Update delay (10) drawfilloval (round (player_1.x), round (player_1.y), 30, 30, white) end loop ----------------------------------- Cervantes Fri Feb 20, 2004 4:54 pm ----------------------------------- That is realistically. You can play around with the values however. The values you should play around with: (values I thought were good in () ) player_1.v (100) player_1.w (25) obj.t (.1)