{"id":471,"date":"2011-11-16T18:44:57","date_gmt":"2011-11-16T16:44:57","guid":{"rendered":"https:\/\/porzelt.net\/?p=471"},"modified":"2019-10-04T17:59:09","modified_gmt":"2019-10-04T17:59:09","slug":"making-the-game-teil-5-multi-touch-frameworks-fur-adobe-flashair-part-2","status":"publish","type":"post","link":"https:\/\/porzelt.net\/en\/making-the-game-teil-5-multi-touch-frameworks-fur-adobe-flashair-part-2","title":{"rendered":"Making The Game &#8211; Teil 5: Multi-Touch Frameworks (f\u00fcr Adobe Flash\/Air) &#8211; Part 2"},"content":{"rendered":"<p>Zu <u><a href=\"https:\/\/porzelt.net\/?p=425\">Teil 1<\/a><\/u><br \/>\n&nbsp;<br \/>\n<strong>Touchlib \/ Bubblebird TUIO-AS3 Framework<\/strong><br \/>\nNeben den Frameworks f\u00fcr native Touch-Ereignisse existieren Frameworks, die haupts\u00e4chlich auf die Verarbeitung von TUIO-Touch-Events ausgelegt sind, welche meistens von Multi-Touch-Tischen oder Multi-Touch-W\u00e4nden verwendet werden.<br \/>\n&nbsp;<br \/>\nTouchlib ist eins der Frameworks, welches schon seit Langem f\u00fcr diese Zwecke entwickelt wird. Bereits vor der Einf\u00fchrung von nativen Touch-Events in Flashplayer 10.1 war es mittels einem Tracker (wie in Teil 3 bereits erkl\u00e4rt) und dem von der NUI-Group bereitgestellten Touchlib-Framework m\u00f6glich Multi-Touch f\u00e4hige Ger\u00e4te und Anwendungen zu erstellen.<br \/>\nTouchlib ist dar\u00fcber hinaus, neben dem Flash Framework, auch ein Tracking Programm f\u00fcr Windows. Jedoch wird meistens das Plattformunabh\u00e4ngige Community Core Vision (CCV) eingesetzt um das Kamerabild zu verarbeiten.<br \/>\n&nbsp;<br \/>\nUm eine Multi-Touch-Anwendung mittels Touchlib zu erstellen muss zuerst eine Verbindung mit dem TUIO-Server hergestellt werden. Dieser \u00fcbermittelt auf einem vorgegebenen Port, in diesem Fall 3000, die Daten der Ber\u00fchrungspunkte.<br \/>\n&nbsp;<\/p>\n<div class=\"actionscript3\">\n<ol>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/TUIO-Connection<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">TUIO<span class=\"sy0\">.<\/span><span class=\"kw7\">init<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">this<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&#8220;localhost&#8221;<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">3000<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&#8220;&#8221;<\/span><span class=\"sy0\">,<\/span><span class=\"kw1\">true<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<\/ol>\n<\/div>\n<p>&nbsp;<br \/>\nNachdem diese Verbindung hergestellt wurde, k\u00f6nnen bereits Touch-Events empfangen und ausgewertet werden. Neben den bereits bekannten Event-Listenern bietet das Framework dar\u00fcber hinaus Funktionen, um alle gesicherten Touch-Punkt-Daten abzurufen.<br \/>\nWie bei GestureWorks werden n\u00e4mlich alle momentan aufgetretenen Ber\u00fchrpunkte in einer Liste gespeichert. \u00dcber den <code>returnBlobs()<\/code>-Aufruf lassen sich so alle Touch-Daten zur\u00fcckgeben, um diese manuell zu verarbeiten.<br \/>\n&nbsp;<\/p>\n<div class=\"actionscript3\">\n<ol>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/Event Listener for Touch Down Events<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw7\">addEventListener<\/span><span class=\"br0\">(<\/span>TouchEvent<span class=\"sy0\">.<\/span><span class=\"kw8\">MOUSE_DOWN<\/span><span class=\"sy0\">,<\/span> touchDown<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/Returns all Touchpoints<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">TUIO<span class=\"sy0\">.<\/span><span class=\"kw7\">returnBlobs<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<\/ol>\n<\/div>\n<p>&nbsp;<br \/>\nDadurch, dass das Framework mit eines der Ersten war, welches das Prinzip von mehreren Ber\u00fchrpunkten verfolgte wurde zur Erleichterung, bei der Programmierung von Anwendungen, die <code>RotatableScalable<\/code>-Klasse entwickelt. Diese Klasse erm\u00f6glicht es, durch Vererbung an ein beliebiges Objekt, Objekte nach belieben zu drehen, skalieren oder verschieben.<br \/>\nDazu muss in der Objekt-Definition nur angegeben werden welche dieser drei Eigenschaften das Objekt besitzen sollte.<br \/>\n&nbsp;<\/p>\n<div class=\"actionscript3\">\n<ol>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw1\">import<\/span> <span class=\"kw6\">flash.display<\/span><span class=\"sy0\">.<\/span><span class=\"kw5\">Sprite<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ ring class <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw1\">import<\/span> app<span class=\"sy0\">.<\/span>core<span class=\"sy0\">.<\/span>action<span class=\"sy0\">.<\/span>RotatableScalable<span class=\"sy0\">;<\/span> &nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw4\">class<\/span> Ring <span class=\"kw1\">extends<\/span> RotatableScalable <span class=\"br0\">{<\/span> &nbsp; &nbsp; &nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw1\">public<\/span> <span class=\"kw3\">function<\/span> Ring<span class=\"br0\">(<\/span><span class=\"kw7\">thickness<\/span><span class=\"sy0\">:<\/span><span class=\"kw5\">Number<\/span> = <span class=\"nu0\">10<\/span><span class=\"sy0\">,<\/span> radius<span class=\"sy0\">:<\/span><span class=\"kw5\">Number<\/span> = <span class=\"nu0\">40<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/&#8212;RotatableScalable options&#8212;&#8212;&#8212;&#8212; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/noScale = true; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">noRotate = <span class=\"kw1\">true<\/span><span class=\"sy0\">;<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/noMove = true; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/div>\n<\/li>\n<\/ol>\n<\/div>\n<p>&nbsp;<br \/>\nSomit kann sogar dynamisch zur Laufzeit ein statisches Objekt zu einem dynamischen, bearbeitbaren gewandelt werden. Objekte wie virtuelle Drehregler lassen sich ebenfalls mit diesen Funktionen realisieren.<br \/>\n&nbsp;<br \/>\n&nbsp;<\/p>\n<figure id=\"attachment_479\" style=\"width: 150px\"  class=\"wp-caption alignright\"><a href=\"http:\/\/cryptedchat.de\/wp-content\/uploads\/2011\/11\/ID11.png\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/cryptedchat.de\/wp-content\/uploads\/2011\/11\/ID11-150x150.png\" alt=\"reacTIVision: fiducial marker ID11\" title=\"reacTIVision: fiducial marker ID11\" width=\"150\" height=\"150\" class=\"size-thumbnail wp-image-479\"><\/a><figcaption class=\"wp-caption-text\">reacTIVision: fiducial marker ID11<\/figcaption><\/figure>\n<p>Eine Erweiterung des Touchlib-Frameworks stellt das Bubblebird TUIO-AS3 Framework dar.<br \/>\nDieses ist ebenfalls ein Framework, welches auf Ger\u00e4ten mit optischer Gestenerkennung und TUIO-Protokoll eingesetzt wird. Wie Touchlib baut das Framework eine Verbindung zum TUIO-Server auf um die Ber\u00fchrpunkt-Daten entgegen zu nehmen. Dar\u00fcber hinaus kann Bubblebird jedoch auch sogenannte \u201eFiducial markers\u201d erkennen.<br \/>\n&nbsp;<br \/>\nDas aus dem italienischen stammende Wort fiducial bedeutet \u00fcbersetzt so viel wie \u201ePassmarke\u201c, welche es in diesem Fall auch ist. Fiducials sind eindeutige Markierungen, die von einer Kamera aufgenommen und von dem Tracker eindeutig erkannt werden. Meistens werden diese fiducials unter Spielfiguren oder Objekten angebracht, damit diese eindeutig verfolgt werden k\u00f6nnen. Durch diese Markierungen ist es n\u00e4mlich nicht nur m\u00f6glich die Position des Objektes herauszufinden, sondern auch die genaue Ausrichtung zu bestimmen. Somit k\u00f6nnen auch Drehungen auf der Stelle erkannt und verarbeitet werden.<br \/>\n&nbsp;<br \/>\nEin bekanntes Beispiel, welches mit fiducials arbeitet ist der reactable. Auf diesem k\u00f6nnen verschiedene Objekte, die entsprechende Markierungen an der Unterseite haben, platziert werden, wodurch objektabh\u00e4ngig ein Klang oder eine Tonfolge abgespielt wird. Neben den Ton-Objekten existieren dar\u00fcber hinaus auch Objekte, welche durch Drehung die Lautst\u00e4rke, die Oktave oder die Geschwindigkeit einzelner Ton-Objekte ver\u00e4ndern.<br \/>\nSo k\u00f6nnen verschiedene Takte und Melodien generiert werden.<br \/>\n&nbsp;<br \/>\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/I9AeUISg-Og?rel=0\" frameborder=\"0\" allowfullscreen=\"\"><\/iframe><br \/>\n&nbsp;<br \/>\nMit dem Bubblebird-Framework k\u00f6nnen diese fiducials ebenfalls erkannt und als Eingabemedium verwendet werden. Wie bei Touch-Events besitzt jeder Marker eine eindeutige ID, welche zum Beispiel nach einem Event-Aufruf ausgelesen werden kann.<br \/>\n&nbsp;<\/p>\n<div class=\"actionscript3\">\n<ol>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/ fiducial events<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw7\">addEventListener<\/span><span class=\"br0\">(<\/span>TuioFiducialEvent<span class=\"sy0\">.<\/span><span class=\"kw8\">ADD<\/span><span class=\"sy0\">,<\/span> fiducialAdd<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw7\">addEventListener<\/span><span class=\"br0\">(<\/span>TuioFiducialEvent<span class=\"sy0\">.<\/span><span class=\"kw8\">MOVE<\/span><span class=\"sy0\">,<\/span> fiducialMove<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw7\">addEventListener<\/span><span class=\"br0\">(<\/span>TuioFiducialEvent<span class=\"sy0\">.<\/span><span class=\"kw8\">REMOVED<\/span><span class=\"sy0\">,<\/span> fiducialRemoved<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw7\">addEventListener<\/span><span class=\"br0\">(<\/span>TuioFiducialEvent<span class=\"sy0\">.<\/span><span class=\"kw8\">ROTATE<\/span><span class=\"sy0\">,<\/span> fiducialRotate<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<\/ol>\n<\/div>\n<p>&nbsp;<br \/>\nSomit k\u00f6nnen mittels des Bubblebird TUIO-AS3 Frameworks sowohl Touch-Events als auch Objekte mit entsprechender Markierung als Eingabemedium verwendet werden, was es zu einem gro\u00dfen Favoriten bei der Arbeit mit TUIO Multi-Touch Ger\u00e4ten macht.<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n<strong>Multi Touch Vista<\/strong><br \/>\nMulti Touch Vista ist zwar kein Flash Framework, aber ich will es an dieser Stelle dennoch erw\u00e4hnen.<br \/>\nDa Windows Vista und Windows 7 bereits Multi-Touch f\u00e4hige Hardware unterst\u00fctzt, aber noch nicht jeder Endanwender diese zu Hause stehe hat, entwickelte die Open Source Community Multi Touch Vista, um Multi-Touch am heimischen PC auszuprobieren. Dabei wirkt das Programm als Treiber, der verschiedene Eingabearten in Windows Touch-Ereignisse umwandelt.<br \/>\nSomit kann Multi Touch Vista unter anderem TUIO-Daten oder die Daten von mehreren Computerm\u00e4usen umwandeln. Somit k\u00f6nnen Benutzer auch an eigentlich nicht Touch-F\u00e4higen Rechnern Multi-Touch Programme testen bzw. verwenden.<br \/>\n&nbsp;<br \/>\nDurch den Einsatz eines solchen Treibers auf TUIO-F\u00e4higen-Ger\u00e4ten wie Multi-Touch Tischen kann man auch in der Anwendungsprogrammierung auf die nativen Touch-Ereignisse zur\u00fcckgreifen und muss nicht, verschiedene Touch-Events abfangen und diese differenziert auswerten.<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n<strong>Native Touch Events in Flash&nbsp;<\/strong><br \/>\nSeit der Einf\u00fchrung des FlashPlayers 10.1 und Adobe AIR 2 Ende 2009 unterst\u00fctzt auch Flash und ActionScript Touch Events. Dabei orientieren sich die Entwickler an den bereits existierenden Maus-Ererignissen, nur dass im Gegenzug zur Maus mehrere simultane Touch-Punkte auftreten k\u00f6nnen und mausspezifische Konzepte wie das Hovering bei Touch-Ereignissen nicht existieren.<br \/>\n&nbsp;<br \/>\nJe nach Bedarf kann man in Flash auf Touchpunkte oder Gesten reagieren. Dabei ist jedoch zu beachten dass man sich nur f\u00fcr eine dieser zwei optionen entscheiden kann.<br \/>\n&nbsp;<\/p>\n<div class=\"actionscript3\">\n<ol>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/ Touchpoints<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">Multitouch<span class=\"sy0\">.<\/span>inputMode = MultitouchInputMode<span class=\"sy0\">.<\/span>TOUCH_POINT<span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/ Touch Gestures<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">Multitouch<span class=\"sy0\">.<\/span>inputMode = MultitouchInputMode<span class=\"sy0\">.<\/span>GESTURE<span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<\/ol>\n<\/div>\n<p>&nbsp;<br \/>\nW\u00e4hrend bei der <code>TOUCH_POINT<\/code>-Methode bei jedem Auftreten und Bewegen eines Ber\u00fchrpunktes ein Ereignis ausgel\u00f6st wird, wird bei der Verwendung des <code>GESTURE<\/code>-Modus das Ereignis erst dann ausgel\u00f6st, sobald ein bestimmter Bewegungsablauf mit den Fingern vollzogen wurde.<br \/>\nDabei ist es System- und hardwareabh\u00e4ngig welche Gesten unterst\u00fctzt werden. Um dies zur Laufzeit herauszufinden bietet Flash die Methode <code>Multitouch.supportedGestures<\/code> an, welche einen String-Vektor mit den verf\u00fcgbaren Gesten zur\u00fcckliefert.<br \/>\n&nbsp;<\/p>\n<figure id=\"attachment_512\" style=\"width: 397px\"  class=\"wp-caption aligncenter\"><a href=\"http:\/\/cryptedchat.de\/wp-content\/uploads\/2011\/11\/gestures-native.png\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/cryptedchat.de\/wp-content\/uploads\/2011\/11\/gestures-native.png\" alt=\"gesture events supported on various platforms\" title=\"gesture events supported on various platforms\" width=\"397\" height=\"472\" class=\"size-full wp-image-512\" srcset=\"https:\/\/porzelt.net\/wp-content\/uploads\/2011\/11\/gestures-native.png 397w, https:\/\/porzelt.net\/wp-content\/uploads\/2011\/11\/gestures-native-252x300.png 252w, https:\/\/porzelt.net\/wp-content\/uploads\/2011\/11\/gestures-native-230x273.png 230w, https:\/\/porzelt.net\/wp-content\/uploads\/2011\/11\/gestures-native-350x416.png 350w\" sizes=\"(max-width: 397px) 100vw, 397px\" \/><\/a><figcaption class=\"wp-caption-text\">gesture events supported on various platforms<\/figcaption><\/figure>\n<p>&nbsp;<br \/>\nAuch wenn bei der Verwendung von Gesten die M\u00f6glichkeit existiert weitere, eigene hinzuzuf\u00fcgen, ist dieser Modus f\u00fcr komplexe und Multiuser-Anwendungen unzureichend.<br \/>\nSo ist es nicht m\u00f6glich, dass zwei Benutzer gleichzeitig auf zwei verschiedenen Objekten Gesten anwenden, selbst wenn es hardwaretechnisch problemlos ginge. Auch ist es f\u00fcr den Benutzer nicht m\u00f6glich zwei Gesten gleichzeitig auf einem Objekt auszuf\u00fchren. So ist ein gleichzeitiges Skalieren und Rotieren, zum Beispiel in einer Bilder-Anwendung, mittels der nativen Gesten nicht machbar.<br \/>\nDie fehlende M\u00f6glichkeit multiple sowie simultane Gesten auszuf\u00fchren ist das gr\u00f6\u00dfte Manko des nativen Gesten-Supports.<br \/>\n&nbsp;<br \/>\nFalls man jedoch diese M\u00f6glichkeiten in seiner Applikation verwenden m\u00f6chte, m\u00fcssen die entsprechenden Gesten im <code>TOUCH_POINT<\/code>-Modus selbst ausprogrammiert werden.<br \/>\nJedoch steht auch in diesem Eingabemodus das sogenannte dragging, das Verschieben eines Objektes, mit einem Finger zur Verf\u00fcgung.<br \/>\n&nbsp;<\/p>\n<div class=\"actionscript3\">\n<ol>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co1\">\/\/ Drag an object while listen to TouchEvents<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">mySprite<span class=\"sy0\">.<\/span><span class=\"kw7\">addEventListener<\/span><span class=\"br0\">(<\/span>TouchEvent<span class=\"sy0\">.<\/span>TOUCH_BEGIN<span class=\"sy0\">,<\/span> onTouchBegin<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">mySprite<span class=\"sy0\">.<\/span><span class=\"kw7\">addEventListener<\/span><span class=\"br0\">(<\/span>TouchEvent<span class=\"sy0\">.<\/span>TOUCH_MOVE<span class=\"sy0\">,<\/span> onTouchMove<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">mySprite<span class=\"sy0\">.<\/span><span class=\"kw7\">addEventListener<\/span><span class=\"br0\">(<\/span>TouchEvent<span class=\"sy0\">.<\/span>TOUCH_END<span class=\"sy0\">,<\/span> onTouchEnd<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw3\">function<\/span> onTouchBegin<span class=\"br0\">(<\/span>evt<span class=\"sy0\">:<\/span>TouchEvent<span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; evt<span class=\"sy0\">.<\/span><span class=\"kw7\">target<\/span><span class=\"sy0\">.<\/span>startTouchDrag<span class=\"br0\">(<\/span>evt<span class=\"sy0\">.<\/span>touchPointID<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">}<\/span><\/div>\n<\/li>\n<\/ol>\n<\/div>\n<p>&nbsp;<br \/>\n&nbsp;<br \/>\n<strong>Fazit<\/strong><br \/>\nDa ich in meiner Anwendung bisher noch nicht die Notwendigkeit sehe Objekte zu drehen oder Verschieben werde ich in meinem Projekt auf jegliche Frameworks verzichten, da ich auf allen System mit den nativen Touch-Events arbeiten kann.Falls es im Laufe meiner Arbeit dennoch dazu kommt, dass ich Gesten zum Skalieren und Rotieren ben\u00f6tige, werde ich diese selbst Programmieren und nat\u00fcrlich die entsprechenden Klassen hier zur Verf\u00fcgung stellen.<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\nKommende Blogeintr\u00e4ge<br \/>\nMaking The Game &#8211; Teil 6: Multi-Touch-Ger\u00e4te und ihre Leistungsgrenzen<br \/>\nMaking The Game &#8211; Teil 7: Interessante Forschungen im Bereich Multi-Touch<br \/>\nMaking The Game &#8211; Teil 8: Vor- und Nachteile NUI <=> GUI<br \/>\nMaking The Game &#8211; Teil 9: Spielekonzeption<br \/>\n&#8230;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\nBilder Quellen:<br \/>\nDas Bild mit der unterst\u00fctzen Gesten auf verschiedenen Systemen stammt von <a href=\"http:\/\/www.adobe.com\/devnet\/flash\/articles\/multitouch_gestures.html\">Adobe<\/a>.<br \/>\nDas verwendete YouTube-Video ist Eigentum des entsprechenden Kanalbesitzers.<br \/>\n&nbsp;<br \/>\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zu Teil 1 &nbsp; Touchlib \/ Bubblebird TUIO-AS3 Framework Neben den Frameworks f\u00fcr native Touch-Ereignisse existieren Frameworks, die haupts\u00e4chlich auf die Verarbeitung von TUIO-Touch-Events ausgelegt sind, welche meistens von Multi-Touch-Tischen oder Multi-Touch-W\u00e4nden verwendet werden. &nbsp; Touchlib ist eins der Frameworks, welches schon seit Langem f\u00fcr diese Zwecke entwickelt wird. Bereits vor der Einf\u00fchrung von nativen Touch-Events in Flashplayer 10.1 war es mittels einem Tracker (wie in Teil 3 bereits erkl\u00e4rt) und dem von der NUI-Group bereitgestellten Touchlib-Framework m\u00f6glich Multi-Touch f\u00e4hige Ger\u00e4te und Anwendungen zu erstellen. Touchlib ist dar\u00fcber hinaus, neben dem Flash Framework, auch ein Tracking Programm f\u00fcr Windows. Jedoch wird meistens das Plattformunabh\u00e4ngige Community Core Vision (CCV) eingesetzt um [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":403,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,7],"tags":[17,20,35,67,81,93,95,97,98,161,168,169,175,207,218],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/porzelt.net\/en\/wp-json\/wp\/v2\/posts\/471"}],"collection":[{"href":"https:\/\/porzelt.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/porzelt.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/porzelt.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/porzelt.net\/en\/wp-json\/wp\/v2\/comments?post=471"}],"version-history":[{"count":1,"href":"https:\/\/porzelt.net\/en\/wp-json\/wp\/v2\/posts\/471\/revisions"}],"predecessor-version":[{"id":1244,"href":"https:\/\/porzelt.net\/en\/wp-json\/wp\/v2\/posts\/471\/revisions\/1244"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/porzelt.net\/en\/wp-json\/wp\/v2\/media\/403"}],"wp:attachment":[{"href":"https:\/\/porzelt.net\/en\/wp-json\/wp\/v2\/media?parent=471"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/porzelt.net\/en\/wp-json\/wp\/v2\/categories?post=471"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/porzelt.net\/en\/wp-json\/wp\/v2\/tags?post=471"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}