Toon posts:

[c#] kant van botsing met 2 rectangles

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het maken van een Breakout spel in c#. Hierbij heb ik de bal als een rectangle en alle blokjes als een rectangle. Ik kan al kijken wanneer het balletje dus een blokje raakt.
Nu ben ik bezig met het maken van een methode die als parameters 2 rectangles krijgt (balletje en balkje) en dan kijkt aan welke kant die hem raakt (links, rechts, boven of onderkant). Ik heb een methode gemaakt maar ik weet zeker dat het makkelijker moet kunnen
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
        
private Position checkPositionOfCollition(Rectangle rec, Rectangle recTarget)
        {
            if (!rec.IntersectsWith(recTarget))
                return Position.None;
            
            rec.Intersect(recTarget);

            if (rec.Left == recTarget.Left && rec.Width < rec.Height)
            {
                if (rec.Top == recTarget.Top)
                {
                    if (rec.Width >= rec.Height)
                        return Position.Top;
                }
                else if (rec.Bottom == recTarget.Bottom)
                {
                    if (rec.Width >= rec.Height)
                        return Position.Bottom;
                }
                return Position.Left;
            }
            else if (rec.Top == recTarget.Top)
            {
                if (rec.Left == recTarget.Left)
                {
                    if (rec.Height >= rec.Width)
                        return Position.Left;
                }
                else if (rec.Right == recTarget.Right)
                {
                    if (rec.Height >= rec.Width)
                        return Position.Right;
                }
                return Position.Top;
            }
            else if (rec.Right == recTarget.Right)
            {
                if (rec.Top == recTarget.Top)
                {
                    if (rec.Width >= rec.Height)
                        return Position.Top;
                }
                else if (rec.Bottom == recTarget.Bottom)
                {
                    if (rec.Width >= rec.Height)
                        return Position.Bottom;
                }
                return Position.Right;
            }
            else if (rec.Bottom == recTarget.Bottom)
            {
                if (rec.Left == recTarget.Left)
                {
                    if (rec.Height >= rec.Width)
                        return Position.Left;
                }
                else if (rec.Right == recTarget.Right)
                {
                    if (rec.Height >= rec.Width)
                        return Position.Right;
                }
                return Position.Bottom;
            }
            //doubtful
            return Position.None;
        }

[ Voor 3% gewijzigd door NMe op 12-10-2005 17:25 . Reden: Hey Creep, als je code opleukt met [code]-tags, doe het dan ook goed. :+ ]


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 26-04 09:25

pjvandesande

GC.Collect(head);

Code tag gebruiken is ten eerste instantie al makkelijker voor ons. :)

  • SlowMeDown
  • Registratie: Mei 2003
  • Laatst online: 15-04 08:14
Ik zou de coördinaten uitrekenen van de middelpunten van beide rectangles. Stel rectangle 1 heeft middelpunt X1, Y1 en rectangle 2 heeft middelpunt X2, Y2, dan kun je heel eenvoudig uitrekenen wat links, rechts, boven en onder is.

Linksboven is bijvoorbeeld X1 < X2 en Y1 < Y2, terwijl rechtsonder X1 > X2 en Y1 > Y2

Of is dit iets te kort door de bocht???

[ Voor 6% gewijzigd door SlowMeDown op 12-10-2005 14:19 ]


  • SlowMeDown
  • Registratie: Mei 2003
  • Laatst online: 15-04 08:14
Heb nog wat code verzonnen. Heb je er wat aan?

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[Flags()]
private enum Position
{
  Left = 1,
  Right = 2,
  Top = 4,
  Bottom = 8,           
  TopLeft = Left | Top,
  TopRight = Right | Top,
  BottomLeft = Left | Bottom,
  BottomRight = Right | Bottom
}

private Position CalculatePosition(int x1, int x2, int y1, int y2)
{
  Position position = 0;
        
  position |= (x1 < x2) ? Position.Left : Position.Right;
  position |= (y1 < y2) ? Position.Top : Position.Bottom;

  return position;          
}

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:53

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op woensdag 12 oktober 2005 @ 13:56:
Ik ben bezig met het maken van een Breakout spel in c#. Hierbij heb ik de bal als een rectangle en alle blokjes als een rectangle. Ik kan al kijken wanneer het balletje dus een blokje raakt.
Nu ben ik bezig met het maken van een methode die als parameters 2 rectangles krijgt (balletje en balkje) en dan kijkt aan welke kant die hem raakt (links, rechts, boven of onderkant). Ik heb een methode gemaakt maar ik weet zeker dat het makkelijker moet kunnen
Ja, daar heb je gelijk in. ......... ........ ;)

En nu? Nu verwacht je dat wij voor je de voel gaan optimaliseren? Kom op, iets meer inzet mag wel hoor :) Heb je zelf al zaken waarvan je direct zegt: "Dat kan handiger?". Zo ja, welke? Ben je zelf al aan het optimaliseren geslagen? Lukte daar iets niet mee? etc.

Ik heb ook je post ff opgeleukt met code tags ;)

Zie ook P&W FAQ - De "quickstart"

[ Voor 3% gewijzigd door Creepy op 12-10-2005 15:01 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

kijk eens op clipping algoritmes. daarmee kun je wel al ergens komen.

ASSUME makes an ASS out of U and ME

Pagina: 1