game maker
Gebruikersnaam:
Wachtwoord:
Home Info Forums Help
Welkom, Gast. Alsjeblieft inloggen of registreren.
De activerings e-mail gemist?
+  Forums
|-+  Werken met Game Maker
| |-+  Tutorials en Uitbreidingen (Moderator: Maarten Baert)
| | |-+  [Dll+Gex] ExtremePhysics - 2D physics engine voor Game Maker
Pagina's: [1] 2 3 ... 8
« vorige volgende »
Print
Advertenties

Maarten Baert
Forumbeheerder


Offline Offline

Berichten: 4942

Gelieve quote te gebruiken als je PMs beantwoordt.


WWW
« Gepost op: 15 April 2009, 22:45:42 »

GM-versie: Game Maker 6, Game Maker 7 en GameMaker 8
Niveau: Gevorderd

ExtremePhysics
Een 2d physics engine gemaakt voor Game Maker.


1600 bodies op 40fps op mijn computer: Intel Core2 Duo 2.5Ghz - waarvan maar één kern gebruikt wordt. Zonder drawen is het nog sneller (85-90 fps).


Fluid simulation example


Nog een example

Een aantal (Engelse) tutorials kan je hier vinden:
http://www.maartenbaert.be/extremephysics/tutorials/
Stel gerust vragen als je iets niet begrijpt.

Ik maak regelmatig nieuwe versies ('releases'). Als je vragen hebt kan je best eerst zorgen dat je de laatste versie hebt. Normaal gezien kan je met weinig of geen aanpassingen overstappen op een nieuwere release, de functienamen en argumenten veranderen zelden.

Download ExtremePhysics 2.2 release 15 (met source code)
Download de examples als executables

Download ExtremePhysics 2.1 release 14 (met source code)
Download ExtremePhysics 2.0 release 6 (met source code)

Licensie

ExtremePhysics wordt verspreid onder de voorwaarden van de GNU Lesser General Public License.
Kort gezegd betekent dat:
  • Je mag de originele DLL of source code gebruiken zoals je zelf wilt, ook in commerciële projecten. Credits zijn niet nodig.
  • Als je een aangepaste versie van ExtremePhysics publiceert, moet dat onder dezelfde of een gelijkaardige licensie. Dit betekent dat de aangepaste versie ook open source moet zijn.
  • Als een project dat je publiceert een aangepaste versie van ExtremePhysics gebruikt, publiceer je in feite ook een aangepaste versie en moet je dus ook de source code van die versie publiceren (van ExtremePhysics, niet van je eigen project).

Polygon generator
GamerXP (van de Engelse GMC) heeft een programma gemaakt dat code genereert voor ExtremePhysics polygons. Je kan het gebruiken om polygons te tekenen voor je sprites. Je kan het hier downloaden:
http://sprites.3dn.ru/Uploads/Files/PolygonCreator.rar

« Laatste verandering: 24 Februari 2013, 01:53:01 door Maarten Baert »

Naar boven Gelogd

esak
Gebruiker


Offline Offline

Berichten: 1036


WWW
« Antwoord #1 Gepost op: 16 April 2009, 18:59:02 »

misschien leuk voor een volgende versie: Threads in je dll zodat ook dual core (en quad core) processor`s helemaal benut kunnen worden.

Naar boven Gelogd

Maarten Baert
Forumbeheerder


Offline Offline

Berichten: 4942

Gelieve quote te gebruiken als je PMs beantwoordt.


WWW
« Antwoord #2 Gepost op: 16 April 2009, 19:20:11 »

Dat met threads is eigenlijk nogal lastig. De rekentijd wordt vooral gebruikt in twee fases:
- collisions zoeken
- velocity constraints oplossen
Collisions zoeken gaat relatief meer tijd kosten naarmate je meer objecten hebt, ik schat dat het bij 500 objecten ongeveer de helft van de tijd in beslag neemt. Natuurlijk hangt het ook af van velocity_iterations want die verlengen de tweede fase enorm. De eerste fase kan ik redelijk gemakkelijk verdelen over een aantal threads, maar bij de tweede zal dat moeilijk of niet kunnen. De reden is dat in de eerste fase gewoon elke thread een lijst met contacts moet opstellen, en die lijsten kunnen later samengevoegd worden. Maar bij de tweede fase verandert de snelheid van objecten voortdurend, dus ik zou ervoor moeten zorgen dat twee threads niet tegelijk iets veranderen aan de snelheid van hetzelfde object. Ik weet niet wat het effect zal zijn van meerdere threads die onafhankelijk velocity constraints oplossen. Ik weet ook niet hoe ik de iterations dan moet regelen.

Waar ik al wel aan gedacht heb is om de DLL in een thread te laten simuleren, en GM terwijl iets anders laten doen. Ik weet alleen niet echt of dit nuttig is, wat kan je in GM doen als je de positie van de objecten nog niet kent?

« Laatste verandering: 16 April 2009, 19:31:17 door Matrebatre »

Naar boven Gelogd

esak
Gebruiker


Offline Offline

Berichten: 1036


WWW
« Antwoord #3 Gepost op: 6 Juli 2009, 21:48:54 »

Ben je er nog meebezig of heb je het even op een stop gezet?

En ben je ook van plan om later nog softbody`s te maken of is dat teveel van het goede?

Naar boven Gelogd

Maarten Baert
Forumbeheerder


Offline Offline

Berichten: 4942

Gelieve quote te gebruiken als je PMs beantwoordt.


WWW
« Antwoord #4 Gepost op: 6 Juli 2009, 22:52:21 »

Ik ben er nog mee bezig.

Soft bodies ga ik er niet in zetten. Ik heb van alle physics engines die ik gezien heb nog niet veel goede simulaties van soft bodies gezien, dus ik betwijfel of het überhaupt wel mogelijk is. Zeker met de beperkte snelheid van GM. Ik weet dat GMPhysics ze had, maar die waren veel te traag en (vind ik) niet erg realistisch, en ook niet echt bruikbaar voor games. Je kan eventueel wel kleine objecten en springs gebruiken om iets gelijkaardigs te maken. Springs komen in de volgende versies, 2.0 of 2.1 dat weet ik nog niet.


Naar boven Gelogd

Maarten Baert
Forumbeheerder


Offline Offline

Berichten: 4942

Gelieve quote te gebruiken als je PMs beantwoordt.


WWW
« Antwoord #5 Gepost op: 29 November 2009, 11:32:11 »

Je mag als je dat wilt mijn code wel gebruiken voor je spel, ik heb hem niet nodig.

Over de argumenten:
  • position_iterations: nog geen functie
  • contact_range: nog geen functie
  • position_bias_factor: nog geen functie
  • velocity_iterations: Het aantal iteraties voor de 'velocity constaints solver'. Verhoog dit als je simulatie niet precies of niet stabiel genoeg is.
  • contact_threshold: Drempelwaarde voor het aanmaken van contacts. Contacts worden aangemaakt zodra de afstand tussen twee dingen kleiner is dan deze waarde. Stel dit in op een afstand die klein genoeg is zodat je het niet opmerkt, bijvoorbeeld 0.1 pixels.
  • velocity_threshold: Drempelwaarde voor de snelheid bij botsingen. Objecten die met een snelheid lager dan deze waarde botsen zullen niet terugbotsen. Boven deze waarde botsen objecten terug met een snelheid (v-velocity_threshold)*restitution, waarbij v de oorspronkelijke snelheid is. Deze instelling is zeer belangrijk omdat het tegengaat dat er bij botsingen energie toegevoegd wordt aan het systeem, waardoor objecten steeds hoger zouden gaan botsen. Stel dit in op een waarde hoger dan de zwaartekracht + de valversnelling die het gevolg is van andere veldkrachten die op een object uitgeoefend worden (dat tweede is meestal 0). Een goede waarde vind ik het dubbele van de zwaartekracht.
  • velocity_bias_factor: Biasfactor voor Baumgarte-stabilisatie. Dit zorgt ervoor dat fouten (die onvermijdelijk zijn vanwege de iteratieve methode) doorgerekend worden in de berekening van de volgende step. Op die manier zullen fouten niet eeuwig groeien. De biasfactor geeft aan hoeveel van de fout doorgerekend moet worden in de berekening. 1 betekent de volledige fout, 0 betekent helemaal niet. Je zou kunnen zeggen dat deze waarde aangeeft hoe 'agressief' de stabilisatiemethode is. Als deze waarde te hoog is, zou de stabilisatie overcompenseren waardoor alles juist minder stabiel wordt. Een goede waarde is 0.2. Verlaag deze waarde als je simulatie onstabiel is (meestal betekent dat dat alles begint te trillen of te zwaaien).
  • slop: Geeft aan hoe ver objecten kunnen overlappen met andere objecten voor ze uit elkaar geduwd worden. Dit was bedoeld om het makkelijker te maken om objecten te maken die net iets kleiner waren dan ingesteld (dit had ik vaak nodig in tests), maar dit ga ik weglaten in de volgende versie. Je kan hetzelfde effect bekomen door de objecten gewoon echt kleiner te maken.

« Laatste verandering: 29 November 2009, 11:52:26 door Matrebatre »

Naar boven Gelogd

generaallucas
Gebruiker


Offline Offline

Berichten: 2900

Verhalen: klaar terwijl u wacht.


WWW
« Antwoord #6 Gepost op: 23 Januari 2010, 18:36:26 »

wat is dat ep_force? een soort friction?


Actionscript 3 - C++ - C# - CSS3 - GML - HTML5 - Javascript - PHP - SQL - Visual Basic - VTask

3DS Max(VRay), Photoshop, Illustrator, Flash, Irrlicht, SDL, CML, OpenGL, Phonegap, Cordova
Naar boven Gelogd

generaallucas
Gebruiker


Offline Offline

Berichten: 2900

Verhalen: klaar terwijl u wacht.


WWW
« Antwoord #7 Gepost op: 2 Maart 2010, 07:48:41 »

Ik heb ook een aantal tutorials gemaakt:

super! echt bedankt!

maar ik wel een vraag...  Verrast

dit is het probleem: ik maak de collisions en de rest van de mikmuk aan, maar er treed geen collision op: waarom?
obj_player create event:

GML:
body = ep_body_create_dynamic(global.world,true);
shape = ep_shape_create_box(global.world,body,sprite_width,sprite_height,x,y,image_angle,1)
ep_shape_set_collision(global.world,body,shape,1,1,0);
ep_shape_set_material(global.world,body,shape,0.7,0,0,0);
ep_body_set_mass(global.world,body,1);

step event:

GML:
direction=point_direction(x,y,mouse_x,mouse_y)
image_angle = direction
ep_body_set_position(global.world,body,x,y,degtorad(image_angle));


create event obj_building (en natuurlijk die van alle andere ''solid'' objecten):

GML:
body = ep_body_create_static(global.world,true);
shape = ep_shape_create_box(global.world,body,32,32,0,0,0,0);
ep_shape_set_collision(global.world,body,shape,1,1,0);
ep_shape_set_material(global.world,body,shape,0.7,0.5,0,0);
ep_body_set_position(global.world,body,x,y,0);

collision event/step event code voor de collisions was volgens mij niet nodig, omdat het in de bijgeleverde examples ook niet voorkwam

« Laatste verandering: 3 Maart 2010, 18:44:34 door generaallucas »

Actionscript 3 - C++ - C# - CSS3 - GML - HTML5 - Javascript - PHP - SQL - Visual Basic - VTask

3DS Max(VRay), Photoshop, Illustrator, Flash, Irrlicht, SDL, CML, OpenGL, Phonegap, Cordova
Naar boven Gelogd

Maarten Baert
Forumbeheerder


Offline Offline

Berichten: 4942

Gelieve quote te gebruiken als je PMs beantwoordt.


WWW
« Antwoord #8 Gepost op: 5 Maart 2010, 18:50:06 »

Je kan het collision-systeem van Game Maker beter niet gebruiken voor objecten die door ExtremePhysics bestuurd worden, want het systeem dat Game Maker gebruikt is minder precies. Je kan dit gebruiken om collisions af te handelen (in de step event):
GML:
// dit moet je doen nadat je een body hebt aangemaakt
ep_body_set_uservar(global.world,body,0,id);

// om alle collisions in één keer af te handelen kan je dit gebruiken:
var c,id1,id2,t;
for(c = ep_world_first_contact(global.world); c!=0; c=ep_contact_next(global.world,c)) {
id1 = ep_body_get_uservar(global.world,ep_contact_get_body1(global.world,c),0);
id2 = ep_body_get_uservar(global.world,ep_contact_get_body2(global.world,c),0);
if id2.object_index=obj_heteersteobject and id1.object_index=obj_hettweedeobject {
t = id1;
id1 = id2;
id2 = t;
t = true;
} else if id1.object_index=obj_heteersteobject and id2.object_index=obj_hettweedeobject {
t = true
}
if t {
// de collision code
}
}

// om de collisions van één object af te handelen kan je dit gebruiken:
var c,id1,id2,otherid;
for(c = ep_shape_get_first_contact(global.world,body,shape1); c!=0; c=ep_shape_get_next_contact(global.world,body,shape1,c)) {
id1 = ep_body_get_uservar(global.world,ep_contact_get_body1(global.world,c),0);
id2 = ep_body_get_uservar(global.world,ep_contact_get_body2(global.world,c),0);
if id1=id {
otherid = id2;
} else {
otherid = id1;
}
if otherid.object_index=obj_hetobject {
// de collision code
}
}

« Laatste verandering: 5 Maart 2010, 20:06:34 door Matrebatre »

Naar boven Gelogd

Maarten Baert
Forumbeheerder


Offline Offline

Berichten: 4942

Gelieve quote te gebruiken als je PMs beantwoordt.


WWW
« Antwoord #9 Gepost op: 26 Maart 2010, 15:08:02 »

Versie 2.1 is klaar. In deze versie heb ik een aantal nieuwe dingen gemaakt:
- Hinge joint limits en springs (veren)
- Distance joints
- Extra collision-functies
- Block solver voor contacts met twee contact points. Hierdoor is de simulatie veel stabieler: ik kan nu tot 30 blokken op elkaar stapelen in plaats van 15.


Naar boven Gelogd

generaallucas
Gebruiker


Offline Offline

Berichten: 2900

Verhalen: klaar terwijl u wacht.


WWW
« Antwoord #10 Gepost op: 26 Maart 2010, 15:34:58 »

klink misschien een beetje dom, maar één ding snap ik niet.


je stelt de collisions in, maar in de examples worden er geen step events gebruikt. hoe is het mogelijk dan dat er collisions optreden(blokken kunnen niet door elkaar, stuiteren van elkaar af enzovoort)


Actionscript 3 - C++ - C# - CSS3 - GML - HTML5 - Javascript - PHP - SQL - Visual Basic - VTask

3DS Max(VRay), Photoshop, Illustrator, Flash, Irrlicht, SDL, CML, OpenGL, Phonegap, Cordova
Naar boven Gelogd

Maarten Baert
Forumbeheerder


Offline Offline

Berichten: 4942

Gelieve quote te gebruiken als je PMs beantwoordt.


WWW
« Antwoord #11 Gepost op: 26 Maart 2010, 16:45:42 »

je stelt de collisions in, maar in de examples worden er geen step events gebruikt. hoe is het mogelijk dan dat er collisions optreden(blokken kunnen niet door elkaar, stuiteren van elkaar af enzovoort)
Dat wordt allemaal gedaan door de DLL. De DLL onthoud welke dingen waar zijn en het is dus helemaal niet nodig om aan te geven dat je een collision wilt berekenen. De DLL doet alles zelf op het moment dat je ep_world_simulate_step aanroept (en dat gebeurt in de step of end step event van de controller).

EDIT: Topic opgeschoond (van 5 pagina's naar 1 pagina)

« Laatste verandering: 31 Maart 2010, 16:48:03 door Matrebatre »

Naar boven Gelogd

Maarten Baert
Forumbeheerder


Offline Offline

Berichten: 4942

Gelieve quote te gebruiken als je PMs beantwoordt.


WWW
« Antwoord #12 Gepost op: 12 April 2010, 19:01:36 »

Ik heb een nieuwe versie geupload, deze heeft ook rail joints.


Naar boven Gelogd

generaallucas
Gebruiker


Offline Offline

Berichten: 2900

Verhalen: klaar terwijl u wacht.


WWW
« Antwoord #13 Gepost op: 20 April 2010, 14:30:47 »

wat is eigenlijk de vertaling van
GML:
if place_meeting(x,y+1,obj_blok)
in het ''extremephysics''?

ik wil het gebruiken om te checken of de speler kan springen omdat ie op een blok zou staan. (en dus niet in de lucht)

« Laatste verandering: 20 April 2010, 15:11:00 door generaallucas »

Actionscript 3 - C++ - C# - CSS3 - GML - HTML5 - Javascript - PHP - SQL - Visual Basic - VTask

3DS Max(VRay), Photoshop, Illustrator, Flash, Irrlicht, SDL, CML, OpenGL, Phonegap, Cordova
Naar boven Gelogd

Maarten Baert
Forumbeheerder


Offline Offline

Berichten: 4942

Gelieve quote te gebruiken als je PMs beantwoordt.


WWW
« Antwoord #14 Gepost op: 20 April 2010, 18:13:03 »

Een paar posts terug staat het antwoord al:
GML:
// dit moet je doen nadat je een body hebt aangemaakt, voor alle bodies die er zijn
ep_body_set_uservar(global.world,body,0,id);

// om de collisions van één object af te handelen kan je dit gebruiken:
var c,id1,id2,otherid;
for(c = ep_shape_get_first_contact(global.world,body,shape1); c!=0; c=ep_shape_get_next_contact(global.world,body,shape1,c)) {
id1 = ep_body_get_uservar(global.world,ep_contact_get_body1(global.world,c),0);
id2 = ep_body_get_uservar(global.world,ep_contact_get_body2(global.world,c),0);
if id1=id {
otherid = id2;
} else {
otherid = id1;
}
if otherid.object_index=obj_blok {
// de collision code hier
}
}


Naar boven Gelogd

Advertenties
« vorige volgende »
Pagina's: [1] 2 3 ... 8
Print


Topic Informatie
0 geregistreerde leden en 1 gast bekijken dit topic.

Ga naar:  

Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines
www.game-maker.nl © 2003-2017 Nederlandse Game Maker Community