Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Kollisionshantering

Postades av 2007-10-28 15:46:34 - Eric Henziger, i forum spel/grafik, Tråden har 1 Kommentarer och lästs av 2520 personer

Hej, håller på med spelprogrammering med openGL. Har gjort en labyrint och försöker just nu få kollisionshanteringen att fungera. Använder boken "Spelprogrammering med CDX och OpenGL". Kollisionshantering fungerar för det mesta som den ska; om man krockar med väggen får man sin position man hade innan man krockade. Men om man t.ex. går framåt och går åt sidan samtidigt kan man gå igenom väggar på vissa ställen. Hur löser man det här?

konstruktor för en boundingbox

BoundingBox(int boxnr){
	xmax = 0;
	xmin = 0;
	zmax = 0;
	zmax = 0;
	boxnumber = boxnr;
}




definition av vad som räknas som en krock


int Hit(int me, int totalboxes, BoundingBox boxarray[])
{
	int intersect = -1;
	for(int i=0;i<me;i++)
		//Är mitt xmax större än den andras xmin samt
		//mitt xmin mindre än den andras xmax samt
		//zmax och zmin på samma sätt som xmax och xmin
		//då är det en krock!
		if(boxarray[me].xmax > boxarray[i].xmin && boxarray[me].xmin < boxarray[i].xmax &&
			boxarray[me].zmax > boxarray[i].zmin && boxarray[me].zmin < boxarray[i].zmax)
			intersect = i;
		
	for (int i=(me+1);i<totalboxes;i++)
		if(boxarray[me].xmax > boxarray[i].xmin && 	boxarray[me].xmin < boxarray[i].xmax &&
			boxarray[me].zmax > boxarray[i].zmin && boxarray[me].zmin < boxarray[i].zmax)
			intersect = i;
	return intersect;
}



Spelarens krockbox och vad som händer när man krockar

                boxn = 0;
                BoundingBox me(boxn);
		me.xmax=(eyex + 2.0);
		me.xmin=(eyex - 2.0);
		me.zmax=(eyez + 2.0);
		me.zmin=(eyez - 2.0);
		boxarray[boxn] = me;

		//krockhantering
		if(me.Hit(boxn, boxn, boxarray) != -1) {
			eyex = oldEyeX;
			eyez = oldEyeZ;
		}
		boxn++;







Svara

Sv: Kollisionshantering

Postades av 2007-10-29 08:56:55 - Niklas Jansson

Kollisionsdetektion är svårare än man kan tro. I 2D är det dock ganska ok.

Har du kollat på exakt vad det är som händer som gör att det blir så?

Jag antar att du gör något i stil med

me.x += ...
me.z += ...


Problemet bör då vara att du tar dig så långt utanför kanten i ett enda steg att du inte märker att det händer. Om du sätter maxhastigheten högre så kommer du få samma effekt oavsett riktning.

Lösningen heter continous collision detection, men blir automatiskt lite krånglig. Vad du gör är att du skapar en ny "bounding box" som täcker in alla punkter från början av ett steg till slutet av det. Går du rakt upp blir den alltså "h + v*t" hög, tror du fattar vad jag menar.


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 762
27 959
271 761
411
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies