Computer Science Canada Programming C, C++, Java, PHP, Ruby, Turing, VB   Username:   Password: Wiki   Blog   Search   Turing   Chat Room  Members
collision detection
Author Message
McKenzie

Posted: Sun Feb 01, 2004 5:35 pm   Post subject: (No subject)

your checks are wrong. e.g. you have:
 code: elsif chars (KEY_LEFT_ARROW) then         if whatdotcolor (circley, circlex + radius + 2) = 12 then

if you are looking left it should be the point (circlex - radius -1, circley)
Sponsor
Sponsor

Paul

Posted: Sun Feb 01, 2004 5:36 pm   Post subject: (No subject)

I got my whatdotcolor collision working, it works fine.
 code: setscreen ("offscreenonly") var x, y : int x := 100 y := 100 var addx, addy : int := 0 var chars : array char of boolean loop     drawfillbox (0, 0, maxx, maxy, black)     drawfillbox (10, 10, maxx - 10, maxy - 10, 0)     Input.KeyDown (chars)     if chars (KEY_UP_ARROW) then         if whatdotcolor (x, y + 11 + addy) = 0                 then             y := y + 5         end if     end if     if chars (KEY_RIGHT_ARROW) then         if whatdotcolor (x + 11 + addx, y) = 0 then             x := x + 5         end if     end if     if chars (KEY_LEFT_ARROW) then         if whatdotcolor (x - 11 - addx, y) = 0 then             x := x - 5         end if     end if     if chars (KEY_DOWN_ARROW) then         if whatdotcolor (x, y - 11 - addy) = 0 then             y := y - 5         end if     end if     drawfilloval (x, y, addx + 10, addy + 10, red)     View.Update     delay (10)     cls     if chars (KEY_ENTER) then         addx := addx + 5         addy := addy + 5     end if     if chars (KEY_BACKSPACE) then         addx := addx - 5         addy := addy - 5     end if end loop

Mine grows and shrinks too

Edit
I deleted the below post because I feared the wrath of AsianSensation.
Cervantes

Posted: Sun Feb 01, 2004 5:36 pm   Post subject: (No subject)

collisions with whatdotcolour are the first way I learned to do them..
however, whatdotcolour isn't as good as going it with coords in some instances, in other instances whatdotcolour is the only way to go

to make it go diagonal..

 code: var chars : array char of boolean var circlex, circley : int := 100 var radius : int := 20 setscreen ("offscreenonly") setscreen ("graphics:400;400") colorback (black) cls loop     View.Update     drawfillbox (20, 20, maxx - 20, maxy - 20, 12)     drawfilloval (circlex, circley, radius, radius, white)     Input.KeyDown (chars)     if chars (KEY_UP_ARROW) then         if whatdotcolor (circlex + radius + 1, circley + radius + 1) not= 7 then             circley := circley + 1         else             circley := circley - 1         end if     end if     if chars (KEY_DOWN_ARROW) then         if whatdotcolor (circlex + radius + 1, circley - radius - 1) not= 7 then             circley := circley - 1         else             circley := circley + 1         end if     end if     if chars (KEY_LEFT_ARROW) then         if whatdotcolor (circley - radius - 1, circlex - radius - 1) not= 7 then             circlex := circlex - 1         else             circlex := circlex + 1         end if     end if     if chars (KEY_RIGHT_ARROW) then         if whatdotcolor (circley + radius + 1, circlex + radius + 1) not= 7 then             circlex := circlex + 1         else             circlex := circlex - 1         end if     end if end loop

the difference being that I got rid of the elsif's and replaces them with if's. before, if the uparrow was being pressed, it would never ask whether any of the other keys were being pressed. this way it will
McKenzie

Posted: Sun Feb 01, 2004 5:37 pm   Post subject: (No subject)

I type too slow.
Paul

Posted: Sun Feb 01, 2004 5:47 pm   Post subject: (No subject)

I tried to get the growing shrinking thing to be restricted by the wall too, using the same principle, but it didn't work.
jonos

Posted: Sun Feb 01, 2004 5:51 pm   Post subject: (No subject)

thanks mckenzie, that really helped, don't know why i didn't see it

for the growing circle couldn't you just go:
[code]
if circlex+radius+1 or circlex -radius-1 or circley+radius +1 or circley -radius -1 = [the wall color] then
radius-1 or radius+1
else
do nothing
end if

that may not be right haven't tested it.l
Cervantes

Posted: Sun Feb 01, 2004 5:53 pm   Post subject: (No subject)

where you have the
 code: if chars (KEY_ENTER) then         addx := addx + 5         addy := addy + 5     end if

you should alter add an if statement in there
 code: if chars (KEY_ENTER) then         addx := addx + 5         addy := addy + 5         if x > maxx - 20 then               x -= 5         end if         if x < 20 then               x += 5         end if         if y > maxy - 20 then               y -= 5         end if         if y < 20 then               y += 5         end if     end if

do the same thing with y

if you want to do collisions with whatdotcolour then you can do that as well, you just have to implement it into the spots in that code up there where I put things like "if y > maxx - 20 then"

Cheers
Cervantes

Posted: Sun Feb 01, 2004 5:56 pm   Post subject: (No subject)

jonos wrote:

if circlex+radius+1 or circlex -radius-1 or circley+radius +1 or circley -radius -1 = [the wall color] then
radius-1 or radius+1
else
do nothing
end if

jonos an if statement does not need to have an else. ex of that is your code modified by me so that it can go on a diagonal. sometimes else is useful though, but if its
 code: else    do nothing end if

then just ditch the else.

Cheers
Sponsor
Sponsor

jonos

Posted: Sun Feb 01, 2004 6:06 pm   Post subject: (No subject)

yeah, i know that, don't know why i put that. i probably though of putting something there but then decided against it.
Paul

Posted: Sun Feb 01, 2004 6:07 pm   Post subject: (No subject)

I tried it, using and instead of or and it works!
 code: setscreen ("offscreenonly") var x, y : int x := 100 y := 100 var addx, addy : int := 0 var chars : array char of boolean loop     drawfillbox (0, 0, maxx, maxy, black)     drawfillbox (10, 10, maxx - 10, maxy - 10, 0)     Input.KeyDown (chars)     if chars (KEY_UP_ARROW) then         if whatdotcolor (x, y + 11 + addy) = 0                 then             y := y + 5         end if     end if     if chars (KEY_RIGHT_ARROW) then         if whatdotcolor (x + 11 + addx, y) = 0 then             x := x + 5         end if     end if    if chars (KEY_LEFT_ARROW) then         if whatdotcolor (x-11-addx, y ) = 0 then             x := x - 5         end if     end if     if chars (KEY_DOWN_ARROW) then         if whatdotcolor (x, y - 11 - addy) = 0 then             y := y - 5         end if     end if     if chars (KEY_ENTER) then         if whatdotcolor (x + addx + 6, y) = 0 and whatdotcolor (x - addx - 6, y) = 0 and                 whatdotcolor (x, y + addy + 6) = 0 and whatdotcolor (x, y - addy - 6) = 0 then             addx := addx + 5             addy := addy + 5         end if     end if     if chars (KEY_BACKSPACE) then         if whatdotcolor (x + addx + 6, y) = 0 and whatdotcolor (x - addx - 6, y) = 0 and                 whatdotcolor (x, y + addy + 6) = 0 and whatdotcolor (x, y - addy - 6) = 0 then             addx := addx - 5             addy := addy - 5         end if     end if     drawfilloval (x, y, addx + 10, addy + 10, red)     View.Update     delay (10)     cls end loop

He didn't delete, I just deleted it, fearing his wrath.
jonos

Posted: Sun Feb 01, 2004 6:13 pm   Post subject: (No subject)

there are still things wrong with it, and i can't find it and don't want to spend time doing it. if you blow it up and move it left, then it can still get through, as well as if you keep playing around with it it will do the same for the other walls. ahhhh, this is confusing
Cervantes

Posted: Sun Feb 01, 2004 6:14 pm   Post subject: (No subject)

oh lol, I just deleted my post sense i saw your post reappear.

(you can delete this and 2 bits if you want Asian )
Paul

Posted: Sun Feb 01, 2004 6:15 pm   Post subject: (No subject)

yea, I noticed that left wall thing to, I fixed that line.
Cervantes

Posted: Sun Feb 01, 2004 6:20 pm   Post subject: (No subject)

for things like this I prefer to use coordinates rather than whatdotcolour in terms of collision
 code: setscreen ("offscreenonly") var x, y : int x := 100 y := 100 var addx, addy : int := 0 var chars : array char of boolean loop     drawfillbox (0, 0, maxx, maxy, black)     drawfillbox (10, 10, maxx - 10, maxy - 10, 0)     Input.KeyDown (chars)     if chars (KEY_UP_ARROW) then         if whatdotcolor (x, y + 11 + addy) = 0                 then             y := y + 5         end if     end if     if chars (KEY_RIGHT_ARROW) then         if whatdotcolor (x + 11 + addx, y) = 0 then             x := x + 5         end if     end if     if chars (KEY_LEFT_ARROW) then         if whatdotcolor (x - 11 + addx, y) = 0 then             x := x - 5         end if     end if     if chars (KEY_DOWN_ARROW) then         if whatdotcolor (x, y - 11 - addy) = 0 then             y := y - 5         end if     end if     if chars (KEY_ENTER) then         addx := addx + 5         addy := addy + 5         if x > maxx - x - addx - 15 then             x -= 5         end if         if x < 0 + x + addx + 15 then             x += 5         end if         if y > maxy - y - addy - 15 then             y -= 5         end if         if y < 0 + y + addy + 15 then             y += 5         end if     end if     if chars (KEY_BACKSPACE) then         addx := addx - 5         addy := addy - 5     end if     drawfilloval (x, y, addx + 10, addy + 10, red)     View.Update     delay (10)     cls end loop

that's still slightly buggy..

the + 15 or the - 15 in this part
 code: if x > maxx - x - addx - 15 then             x -= 5         end if

10 because you did drawfilloval (x,y,addx + 10, addy + 10, red) and 5 because that's how much you add every time enter or backspace is hit. the 5 is prevention.

Keep playing around with it and we can iron out all the bugs.

EDIT: the bug in this code is that it works fine for the first wall that you got to, but then any of the other walls you go to its buggy...
Andy

Posted: Sun Feb 01, 2004 6:25 pm   Post subject: (No subject)

Cervantes wrote:
however, whatdotcolour isn't as good as going it with coords in some instances, in other instances whatdotcolour is the only way to go

cervantes, how much bits do u want to lose? whatdotcolor is ALWAYS i repeat ALWAYSE the way to go!!!! and not in some instances, nonono, in ALL i repeat ALL instances, whatdotcolor is the only way to not go, LIVE.

-5 bits btw
 Display posts from previous: All Posts1 Day7 Days2 Weeks1 Month3 Months6 Months1 Year Oldest FirstNewest First

Page 2 of 4  [ 49 Posts ]
Goto page Previous  1, 2, 3, 4  Next
 Jump to:  Select a forum  CompSci.ca ------------ - Network News - General Discussion     General Forums   -----------------   - Hello World   - Featured Poll   - Contests     Contest Forums   -----------------   - DWITE   - [FP] Contest 2006/2008   - [FP] 2005/2006 Archive   - [FP] 2004/2005 Archive   - Off Topic     Lounges   ---------   - User Lounge   - VIP Lounge     Programming -------------- - General Programming     General Programming Forums   --------------------------------   - Functional Programming   - Logical Programming   - C     C   --   - C Help   - C Tutorials   - C Submissions   - C++     C++   ----   - C++ Help   - C++ Tutorials   - C++ Submissions   - Java     Java   -----   - Java Help   - Java Tutorials   - Java Submissions   - Ruby     Ruby   -----   - Ruby Help   - Ruby Tutorials   - Ruby Submissions   - Turing     Turing   --------   - Turing Help   - Turing Tutorials   - Turing Submissions   - PHP     PHP   ----   - PHP Help   - PHP Tutorials   - PHP Submissions   - Python     Python   --------   - Python Help   - Python Tutorials   - Python Submissions   - Visual Basic and Other Basics     VB   ---   - Visual Basic Help   - Visual Basic Tutorials   - Visual Basic Submissions     Education ----------- - Student Life   Graphics and Design ----------------------- - Web Design     Web Design Forums   ---------------------   - (X)HTML Help   - (X)HTML Tutorials   - Flash MX Help   - Flash MX Tutorials   - Graphics     Graphics Forums   ------------------   - Photoshop Tutorials   - The Showroom   - 2D Graphics   - 3D Graphics     Teams ------ - dTeam Public

 Style: Appalachia blueSilver eMJay subAppalachia subBlue subCanvas subEmjay subGrey subSilver subVereor Search: