„Urban AI“ Pathfinding

 


honsey
Gast

27.01.10
11:14 Uhr
Hat jemand von euch schonmal versucht Fussgänger/Passanten in Flash bauen und mit einer künstlichen Intelligenz auszustatten. Will heissen, dass die Viecher nicht einfach rumwuseln, sondern hauptsächlich in eine Richtung steuern und sich gegenseitig ausweichen.

Alle Informationen die ich im Netz finde, sind leider schon down…
Link zu diesem Beitrag in die Zwischenablage kopieren
Mister Ad
Werbung
Schon mal bei Zalando, Amazon oder eBay geguckt? Vielleicht wirst du dort fündig.

 
korrupt
Überläufer

27.01.10
11:43 Uhr
es gibt sehr sehr viele arbeiten und algorithmen zu crowd simulation.
Link zu diesem Beitrag in die Zwischenablage kopieren
espy
Veteran

27.01.10
12:51 Uhr
Vielleicht helfen dir steering/flocking-Algorithmen weiter: http://blog.soulwire.co.uk/flash/actions...behaviors/

Haben halt keine Kollisonsabfrage. Das ließe sich aber u.U. mit dem ProximityManager von Skinner kombinieren: http://www.gskinner.com/blog/archives/20...anage.html

Oder irgendwas simpleres, Kachelbasiertes.
Link zu diesem Beitrag in die Zwischenablage kopieren
moka
Gast

27.01.10
13:17 Uhr
http://www.vergenet.net/~conrad/boids/ps...ocode.html

der pseudocode hat mir damals gute geholfen. Zusammen mit einem waypoint/pathfinding system nimmt dir flocking immerhin ab, dass sie sich gegenseitig ausweichen.

Für eine echtzeit simulation solltest du aber noch einige optimierungen treffen. (z.B.: die fläche auf der sie sich bewegen in sektoren einteilen, sodass du die kollisionsabfragen nur mit den objekten innerhalb des jeweiligen sektors machst. Techniken, die dir dabei weiterhelfen könnten sind unter anderm Spatial Hashing und Octree(3D)/Quadtree(2D) traversal, einfach mal googlen, findet man sehr viel!)
Link zu diesem Beitrag in die Zwischenablage kopieren
espy
Veteran

27.01.10
13:42 Uhr
moka schrieb am 27.01.10, 13:17 Uhr:

Für eine echtzeit simulation solltest du aber noch einige optimierungen treffen. (z.B.: die fläche auf der sie sich bewegen in sektoren einteilen, sodass du die kollisionsabfragen nur mit den objekten innerhalb des jeweiligen sektors machst. Techniken, die dir dabei weiterhelfen könnten sind unter anderm Spatial Hashing und Octree(3D)/Quadtree(2D) traversal, einfach mal googlen, findet man sehr viel!)

Darum kümmert sich der Proximitymanager.
Link zu diesem Beitrag in die Zwischenablage kopieren
moka
Gast

27.01.10
18:04 Uhr
espy schrieb am 27.01.10, 13:42 Uhr:

moka schrieb am 27.01.10, 13:17 Uhr:

Für eine echtzeit simulation solltest du aber noch einige optimierungen treffen. (z.B.: die fläche auf der sie sich bewegen in sektoren einteilen, sodass du die kollisionsabfragen nur mit den objekten innerhalb des jeweiligen sektors machst. Techniken, die dir dabei weiterhelfen könnten sind unter anderm Spatial Hashing und Octree(3D)/Quadtree(2D) traversal, einfach mal googlen, findet man sehr viel!)

Darum kümmert sich der Proximitymanager.

keine ahnung was das ist )
Link zu diesem Beitrag in die Zwischenablage kopieren
espy
Veteran

27.01.10
18:19 Uhr
Das was ich in dem Post vor Deinem verlinkt habe )
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

29.01.10
17:03 Uhr
Editiert: 29.01.10, 17:09 Uhr
vielen dank! ich hab mir ein paar der sachen mal angeguckt, aber ich glaube die performance gibt das nicht her. (isometrische flash auf full-hd brain)

hab jetzt was eigenes gebaut – ganz bilig: wegpunkte in ein array geschoben, fertig. sieht ganz ordentlich aus und passt ganz gut zu unserem style.



hier noch ein paar auszüge – 010101!

  1. private const waypoints0:Array = new Array(
  2. new Array(-410, -100, 0, 1),
  3. new Array(-410, 72, 1, 0),
  4. new Array( 100, 72, 0, -1),
  5. new Array( 100, -440, -1, 0),
  6. new Array(-50, -440, 1, 0) );
Quelltext in Zwischenablage kopieren

und so wird das ganze von den fussgängern verwertet. wenn man das noch optimieren kann – nur her damit!

Spoiler (anzeigen):

  1. private function initialPosition(_pedestrian:IsoSprite):void
  2. {
  3. var thiswp = wp[0];
  4. var nextwp = wp[1];
  5. var offset:int = (Math.random() * OFFSET) - (OFFSET / 2);
  6.  
  7. //beam it scotty
  8. _pedestrian.moveTo( thiswp[0] + offset, thiswp[1] + offset, 0);
  9.  
  10. //how long to walk: s_max
  11. s_max = Math.abs( thiswp[0] - nextwp[0] ) + Math.abs( thiswp[1] - nextwp[1] );
  12.  
  13. //take care about the right sprite
  14. switchSprite(thiswp[2], thiswp[3]);
  15. }
  16.  
  17. private function switchSprite(_xdir:int, _ydir:int):void
  18. {
  19. if(_ydir>0){
  20. this.sprites = [ sprite_a ];
  21. }
  22. else if(_ydir<0){
  23. this.sprites = [ sprite_c ];
  24. }
  25. else if(_xdir>0){
  26. this.sprites = [ sprite_b ];
  27. }
  28. else if(_xdir<0){
  29. this.sprites = [ sprite_d ];
  30. }
  31. }
  32.  
  33. private function onEnterFrame(evt:ProxyEvent):void
  34. {
  35. if(s < s_max)
  36. {
  37. move();
  38. }
  39. else if(wp_i < wp.length-2)
  40. {
  41. wp_i++;
  42. s = 0;
  43.  
  44. setSmax();
  45. switchSprite(wp[wp_i][2], wp[wp_i][3]);
  46. }
  47. else
  48. {
  49. wp_i = 0;
  50. s = 0;
  51.  
  52. initialPosition(this);
  53. }
  54.  
  55. }
  56.  
  57. private function move():void
  58. {
  59. var thiswp = wp[wp_i];
  60.  
  61. this.moveTo(this.x + thiswp[2] * SPEED, this.y + thiswp[3] * SPEED, 0);
  62. s += SPEED;
  63. }
  64.  
  65. private function setSmax():void
  66. {
Quelltext in Zwischenablage kopieren
Link zu diesem Beitrag in die Zwischenablage kopieren
emil
Veteran

29.01.10
17:13 Uhr
Das sind jedenfalls tolle DDR-Frühlingsfarben. ja
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

29.01.10
17:28 Uhr
hehe – so sieht's eben aus, wenn die schwaben noch nicht quartier bezogen haben )



…aber dann: wird erstmal schön renoviert:
Spoiler (anzeigen):


…ja: das gefällt ihnen schon besser!
Spoiler (anzeigen):


…gleich nochmal…
Spoiler (anzeigen):


…und jetzt können sichs nurnoch reiche schwaben leisten – heiligs blechle )
Spoiler (anzeigen):

Link zu diesem Beitrag in die Zwischenablage kopieren
 
#