New games every week!
JSE - New Collisions Blog
4th June 2022
Though I do still need to tweak a couple of elements, the new Collision methodology in JSE is now available to use.

-=-=-

// Crates // by Jayenkai // Created 2022/6/4 Symbol 0,"14_P_P_P_P?D_D/QQRRQQRRJRQRRJQ.RRQQRRJRQRRJQ.RRQQRRJRQRRJQ.RRQQRRJRQRRJQ.RRQQRRJRQRRJQ.RRQQRRJRQRRJQ.RRQQRRJRQRRJQ.RRQQRRJRQRRJQ.RRQQRRJRQRRJQ.RRQQRRJRQRRJQQD_D/P_P_P_P?"; Symbol 1,"14_0_0_0_0_0_0_0_0/RR0_0?RR0_0?RR0_0?RR0_0!RR0_0?RR0_0!RR0_0?R,0_0?RR"; #CONST $Boxes=25 Dim Box($Boxes,10) Graphics 512,512,2 Repeat CLS Collide_Pointer=Plot(MouseX(),MouseY()) h=MouseHit() for b=0 to $Boxes if Box(b,0)==0 and Rnd(0,100)<10 Box(b,1)=Rand(32,ScreenWidth()-32) Box(b,2)=0-Rand(64,128) Box(b,5)=Rand(0,360) Box(b,0)=1 endif if Box(b,0)==1 SetSize 2,2 if (b mod 5)==1 then SetSize 1,2 if (b mod 5)==3 then SetSize 2,1 SetRot Box(b,5) SetAlpha(0) Box(b,7)=DrawImg(box(b,1)-7,Box(b,2)+2) Box(b,8)=DrawImg(box(b,1),Box(b,2)+8) Box(b,9)=DrawImg(box(b,1)+7,Box(b,2)+2) SetAlpha(1) Box(b,6)=DrawImg(box(b,1),Box(b,2)) f=2 for m=0 to $Boxes if m<>b and Box(m,0)==1 if Collide(Box(b,8),Box(m,6))==1 and Box(b,2)<Box(m,2) then if Collide(Box(b,7),Box(m,6))==0 then f=1 if Collide(Box(b,9),Box(m,6))==0 then f=3 if f==2 then f=0 endif endif next if box(b,2)>jscrh-16 then f=0 if f==1 then Box(b,2)=Box(b,2)+2:Box(b,1)=Box(b,1)-4:Box(b,5)=Box(b,5)-jRnd(3,6) if f==2 then Box(b,2)=Box(b,2)+6 if f==3 then Box(b,2)=Box(b,2)+2:Box(b,1)=Box(b,1)+4:Box(b,5)=Box(b,5)+jRnd(3,6) if box(b,1)<-32 or box(b,1)>jscrw+32 then box(b,0)=0 if Collide(Collide_Pointer,box(b,6)) and h then h=0 For q=0 to 32 ThrowParticle box(b,1),box(b,2),2,Rand(0,360),Rnd(0.5,2),1 Next Box(b,0)=0 endif endif next SetParticleSize 32 Flip Forever


Disclaimer : It's not perfect.
And the above example doesn't really show it off, due to my rubbish Physics code. Anyone deft at making better physics code would end up with a better example, but .. there we go!!

The new collision functionality is now up and running.
The important drawing functions, Line, Plot, DrawImage, Rect, Oval and Triangle, now all have a return value, which links to its current position/rotation/size/collision type.
You can then use these collision values inside the Collide(object a, object b) function to test for collisions.

Collisions aren't perfect, and obviously using too many of them will slow things down a fair bit, but I'll do what I can to neaten it up.

Current obvious issues

1. Rects don't rotate. Not sure why they don't. Did I decide that a long time ago?! Can't remember. Perhaps it was a "It's just quicker that way" thing.

2. Ovals seem to have a little bit of a "margin/padding" when colliding against certain other things. Bit of wonky maths, there, I think.

3. Shapes (When you make an oval with 6 sides it becomes a hexagon) do not collide accurately, and instead behave as ovals.

4. .. And all the ovals only behave as circles, and rotation is all out the window for them!!

5. Line thickness is ignored.

6. DrawRect/DrawTriangle/DrawOval don't behave as hollow objects.

7. Symbols don't collide pixel-perfectly, so if all you have is a little dot in an image, the entire square will still be assumed as the collision area. I might see about chopping down obvious spaces, but I doubt I'll ever be able to get pixel-perfect collisions.

ToDo


First, I need to fix up the collisions that are there, and .. hopefully make them a little bit cleaner when colliding.

Next, I could do with adding Text/Print into the mix, though they're not going to be the easiest thing, I imagine! .. I might end up just wrapping all the text into rectangular boxes.
Views 17, Upvotes 1  
Daily Blog , Jse
New games every week!
Site credits : All of the above : Jayenkai
(c) Jayenkai 2023 and onwards, RSS feed

Blog - JSE - New Collisions - AGameAWeek