<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>flashdevelop.de</title>
	<atom:link href="http://www.flashdevelop.de/feed" rel="self" type="application/rss+xml" />
	<link>http://www.flashdevelop.de</link>
	<description>a fool with a tool is still a fool</description>
	<lastBuildDate>Fri, 18 May 2012 18:47:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Sprite-Sheets mit CS6 exportieren und in Haxe importieren</title>
		<link>http://www.flashdevelop.de/haxe/sprite-sheets-mit-cs6-exportieren-und-in-haxe-importieren.html</link>
		<comments>http://www.flashdevelop.de/haxe/sprite-sheets-mit-cs6-exportieren-und-in-haxe-importieren.html#comments</comments>
		<pubDate>Fri, 18 May 2012 11:43:15 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Haxe]]></category>
		<category><![CDATA[Beispiel]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=763</guid>
		<description><![CDATA[Mit Adobe Flash CS6 können nun Sprite-Sheets zur Weiterverarbeitung erstellt werden. Ich habe mich mit Haxe beschäftigt und mir einen Importer für http://lib.haxe.org/p/spritesheet geschrieben. Wir benötigen in Haxe folgende Lib&#8217;s: spritesheet hxJson2 Falls diese nicht Installiert sind kann dies mit dem Terminal / CMD nachgeholt werden. haxelib install spritesheet haxelib install hxJson2 Nun legen wir ein [...]]]></description>
			<content:encoded><![CDATA[<p>Mit Adobe Flash CS6 können nun Sprite-Sheets zur Weiterverarbeitung erstellt werden. Ich habe mich mit Haxe beschäftigt und mir einen Importer für <em><a title="Spritesheet Lib" href="http://lib.haxe.org/p/spritesheet" target="_blank">http://lib.haxe.org/p/spritesheet</a></em> geschrieben.</p>
<p>Wir benötigen in Haxe folgende Lib&#8217;s:</p>
<ul>
<li><a title="Haxe Lib spritesheet" href="http://lib.haxe.org/p/spritesheet" target="_blank">spritesheet</a></li>
<li><a title="Haxe Lib hxJson2" href="http://lib.haxe.org/p/hxJson2" target="_blank">hxJson2</a></li>
</ul>
<p>Falls diese nicht Installiert sind kann dies mit dem Terminal / CMD nachgeholt werden.</p>
<pre class="brush:bash">haxelib install spritesheet
haxelib install hxJson2</pre>
<p><span id="more-763"></span>Nun legen wir ein <em>HaXe NME</em> Projekt an. In der <em>nmml</em> Datei fügen wir die beiden Lib&#8217;s hinzu.</p>
<pre class="brush:xml">&lt;haxelib name="spritesheet" /&gt;
&lt;haxelib name="hxJson2" /&gt;</pre>
<p>In FlashDevelop können die Lib&#8217;s noch zusätzlich eingetragen werden, so funktioniert auch die Autovervollständigung.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2012/05/Haxe-Properties.png" rel="lightbox[763]" title="Haxe Properties"><img class="aligncenter size-medium wp-image-776" title="Haxe Properties" src="http://www.flashdevelop.de/wp-content/uploads/2012/05/Haxe-Properties-300x160.png" alt="" width="300" height="160" /></a></p>
<p>Als nächstes erstellen wir uns ein paar MovieClips in Adobe Flash CS6 und Exportieren sie als Spritesheet. Ich habe einen BouncingBall und ein RedSquare erstellt. Nun selektieren wir beide MovieClips in der Bibliothek, klicken mit der rechten Maustaste drauf und wählen <em>Sprite-Sheet erstellen&#8230; </em>Im nächstem Bild seht ihr meine gewählten Einstellungen, wichtig ist das Datenformat JSON-Array. Ein anderes Format habe ich bisher noch nicht umgesetzt.</p>
<p><a href="http://www.flashdevelop.de/wp-content/uploads/2012/05/Sprite-Sheet-erstellen.png" rel="lightbox[763]" title="Sprite-Sheet erstellen"><img class="aligncenter size-medium wp-image-777" title="Sprite-Sheet erstellen" src="http://www.flashdevelop.de/wp-content/uploads/2012/05/Sprite-Sheet-erstellen-300x191.png" alt="" width="300" height="191" /></a></p>
<h3>Der Importer &#8220;CS6jsonArray&#8221;</h3>
<p>Den Importer  findet ihr unter <em>spritesheet.importers.CS6jsonArray</em>, angelehnt an den  <em>com.eclecticdesignstudio.spritesheet.importers.SpriteLoq</em>. Übergeben wird die JSON Datei, das Verzeichnis der PNG Datei und den Namen des Sprites. Die letzten beiden Parameter sind optional.</p>
<p><strong>Zum Namen des Sprites:<br />
</strong>Der Name wird automatisch von CS6 gesetzt. Wird der MovieClip aus der Bibliothek exportiert, so ist es der Name aus der Bibliothek. Von der Bühne aus wir der Instanzname genutzt, falls dieser gesetzt wurde.</p>
<p>Somit ergibt sich für unser Beispiel der folgende Aufruf</p>
<pre class="brush:as3">CS6jsonArray.parse(ApplicationMain.getAsset('assets/spritesheets.json'), 'assets', 'RedSquare')</pre>
<p>Die Funktion liefert uns ein <em>SpriteSheet</em>, den müssen wir dem <em>AnimatedSprite</em> übergeben. Im<em> CS6jsonArry</em> Importer habe ich die <em>Framerate</em> auf 30 und den <em>Loop</em> auf true gesetzt. Dieses Verhalten trägt den Namen <em>sprite</em> , da die JSON Datei keine brauchbaren Informationen liefert.</p>
<p>Ausschnitt der Main.hx</p>
<pre class="brush:as3">...
	public function new() {
		super();

		// RedQuare aus spritesheets.png erstellen, wir übergeben die JSON Datei
		var spritesheet:SpriteSheet = CS6jsonArray.parse(ApplicationMain.getAsset('assets/spritesheets.json'), 'assets', 'RedSquare');
		_square = new AnimatedSprite(spritesheet);
		_square.showBehavior('sprite');
		_square.x = 10;
		_square.y = 10;
		addChild(_square);

		// BouncingBall aus pritesheets.png erstellen
		spritesheet = CS6jsonArray.parse(ApplicationMain.getAsset('assets/spritesheets.json'), 'assets', 'BouncingBall');
		_ball = new AnimatedSprite(spritesheet);
		_ball.showBehavior('sprite');
		_ball.x = 130;
		_ball.y = 10;
		addChild(_ball);

		// Ebenfalls das RedQuare aber exportiert in einer eigenen Datei
		spritesheet = CS6jsonArray.parse(ApplicationMain.getAsset('assets/square.json'), 'assets');
		_singleSquare = new AnimatedSprite(spritesheet);
		_singleSquare.showBehavior('sprite');
		_singleSquare.x = 200;
		_singleSquare.y = 10;
		addChild(_singleSquare);

		// AnimatedSprites brauchen ein uptate
		_lastTime = Lib.getTimer();
		addEventListener(Event.ENTER_FRAME, update);
	}
...
private function update(event:Event):Void {
		var currentTime:Int = Lib.getTimer();
		var deltaTime:Int = currentTime - _lastTime;
		_square.update(deltaTime);
		_ball.update(deltaTime);
		_singleSquare.update(deltaTime);
		_lastTime = currentTime;
	}...</pre>
<h3>Der Importer</h3>
<pre class="brush:as3">class CS6jsonArray
{

	public static function parse(data:String, assetDirectory:String="", name:String=""):SpriteSheet
	{
		var json:Dynamic = JSON.parse(data);

		var frames:Array = new Array();
		var behaviors:Hash = new Hash();
		var behaviorFrames:Array = new Array();

		if (name == "") name = json.frames[0].filename;

		var cnt:Int = 0;
		for (i in 0...json.frames.length) {
			if (name == json.frames[0].filename || 0 == json.frames[i].filename.indexOf(name))
			{
				frames.push(new SpriteSheetFrame(Std.parseInt(json.frames[i].frame.x), Std.parseInt(json.frames[i].frame.y), Std.parseInt(json.frames[i].frame.w), Std.parseInt(json.frames[i].frame.h), Std.parseInt(json.frames[i].spriteSourceSize.x), Std.parseInt(json.frames[i].spriteSourceSize.y)));
				behaviorFrames.push(cnt);
				cnt++;
			}
		}

		var behaviorData:BehaviorData = new BehaviorData("sprite", behaviorFrames, true, 30, 0, 0);
		behaviors.set("sprite", behaviorData);

		var spritesheet:SpriteSheet = new SpriteSheet(frames, behaviors);
		spritesheet.name = name;
		spritesheet.setImage(ApplicationMain.getAsset(assetDirectory + '/' + json.meta.image));
		return spritesheet;
	}

}</pre>
<p>Und so sieht es dann aus:</p>

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_0" width="400" height="300" align="center">
      <param name="movie" value="http://www.flashdevelop.de/wp-content/uploads/2012/05/HaxeSpritesheets.swf" />
      <param name="align" value="center" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://www.flashdevelop.de/wp-content/uploads/2012/05/HaxeSpritesheets.swf" width="400" height="300" align="center">
      <!--<![endif]-->
        
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>

<p>&nbsp;</p>
<p>Das Beispielprojekt gibt es hier: <a href="http://www.flashdevelop.de/wp-content/uploads/2012/05/HaxeSpritesheets.zip">HaxeSpritesheets</a></p>
<p>Thanks Joshua Granick : <a title="Export SWF Animation to NME using Sprite Sheets" href="http://www.joshuagranick.com/blog/2011/08/27/export-swf-animation-to-nme-using-sprite-sheets/" target="_blank">http://www.joshuagranick.com/blog/2011/08/27/export-swf-animation-to-nme-using-sprite-sheets/</a></p>
<h2>UPDATE 18.05.2012 20:33</h2>
<p>So, jetzt habe ich auch einen Importer gebaut, der die Sterling XML aus Adobe Flash CS6 einließt. Diesem Importer kann sogar ein <em>BehaviorData</em> übergeben werden.</p>
<pre class="brush:as3">var behaviorData = new BehaviorData("sprite", [], true, 30, 0, 0); // sprite = Behavior Name, true = Loop, 30 = Framerate
FlashStarling.parse(ApplicationMain.getAsset('assets/spritesheets.xml'), 'assets', 'RedSquare', behaviorData)</pre>
<h3>Der Importer FlashStarling.hx</h3>
<pre class="&quot;brush:as3">package spritesheet.importers;

import nme.display.Bitmap;
import com.eclecticdesignstudio.spritesheet.data.SpriteSheetFrame;
import com.eclecticdesignstudio.spritesheet.SpriteSheet;
import com.eclecticdesignstudio.spritesheet.data.BehaviorData;
import haxe.xml.Fast;

class FlashStarling {

	public static function parse (data:String, assetDirectory:String="", name:String="", behaviorData:BehaviorData=null):SpriteSheet {
		var frames:Array = new Array();
		var behaviors:Hash = new Hash();
		var behaviorFrames:Array = new Array();

		var xml:Xml = Xml.parse(data);
		var spriteSheetNode:Xml = xml.firstElement();

		var filename:String = new Fast(spriteSheetNode).att.imagePath;

		var cnt:Int = 0;
		for (node in spriteSheetNode.elements())
		{
			var n:Fast = new Fast(node);

			if (name == "" || 0 == n.att.name.indexOf(name))
			{
				var frameX:Int = n.has.frameX ? Std.parseInt(n.att.frameX) : 0;
				var frameY:Int = n.has.frameY ? Std.parseInt(n.att.frameY) : 0;
				frames.push(new SpriteSheetFrame(Std.parseInt(n.att.x), Std.parseInt(n.att.y), Std.parseInt(n.att.width), Std.parseInt(n.att.height), frameX, frameY));
				behaviorFrames.push(cnt);
				cnt++;
			}
		}

		if (behaviorData == null) {
			behaviorData = new BehaviorData("sprite", behaviorFrames, true, 30, 0, 0);
		} else {
			behaviorData.frames = behaviorFrames;
		}

		behaviors.set(behaviorData.name, behaviorData);

		var spritesheet:SpriteSheet = new SpriteSheet(frames, behaviors);
		spritesheet.name = name =="" ? filename : name;
		spritesheet.setImage(ApplicationMain.getAsset(assetDirectory + '/' + filename));
		return spritesheet;
	}		

}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/haxe/sprite-sheets-mit-cs6-exportieren-und-in-haxe-importieren.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conditional Compilation und inline</title>
		<link>http://www.flashdevelop.de/allgemein/conditional-compilation-und-inline.html</link>
		<comments>http://www.flashdevelop.de/allgemein/conditional-compilation-und-inline.html#comments</comments>
		<pubDate>Fri, 23 Mar 2012 10:21:56 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[compc]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=751</guid>
		<description><![CDATA[Aus C und C++ kennt man die Anweisungen #define, #ifdef und in Objetive-C #if. Änliches kann man mit ActionScript auch machen, dort gibt es die Anweisung CONFIG::. Erste Möglichkeit wäre eine inline Konstante, diese kann Werte wie Strings, Number und Boolean aufnehmen. public static const DEBUG_MODE:Boolean = CONFIG::debugmode; Dem Kompiler müssen wir anschließend die Definition übergeben. [...]]]></description>
			<content:encoded><![CDATA[<p>Aus C und C++ kennt man die Anweisungen <span style="color: #800000;"><em>#define</em></span>, <span style="color: #800000;"><em>#ifdef</em></span> und in Objetive-C <span style="color: #800000;"><em>#if</em></span>. Änliches kann man mit ActionScript auch machen, dort gibt es die Anweisung <span style="color: #800000;"><em>CONFIG::</em></span>.<span id="more-751"></span></p>
<p>Erste Möglichkeit wäre eine inline Konstante, diese kann Werte wie <span style="color: #008000;">Strings</span>, <span style="color: #008000;">Number</span> und <span style="color: #008000;">Boolean</span> aufnehmen.</p>
<pre class="brush:as3">public static const DEBUG_MODE:Boolean = CONFIG::debugmode;</pre>
<p>Dem Kompiler müssen wir anschließend die Definition übergeben.</p>
<pre>-define+=CONFIG::debugmode,true</pre>
<p>Es können auch Berechnungen übergeben werden. Beispiele gibt es auf der Seite von <a title="compiler" href="http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_21.html" target="_blank">Adobe</a>.  Desweiteren ist CONFIG nicht vorgeben, so könnte man in unserem Beispiel auch HANSWURST schreiben.</p>
<p>In FDT können an zwei Stellen die Argumente an den Kompiler übergeben werden, siehe Screenshots</p>
<p style="text-align: center;"><a href="http://www.flashdevelop.de/wp-content/uploads/2012/01/compiler_arguments1.jpg" rel="lightbox[751]" title="compiler_arguments1"><img class="alignnone size-thumbnail wp-image-752" title="compiler_arguments1" src="http://www.flashdevelop.de/wp-content/uploads/2012/01/compiler_arguments1-150x150.jpg" alt="" width="150" height="150" /></a> oder  <a href="http://www.flashdevelop.de/wp-content/uploads/2012/01/compiler_arguments2.jpg" rel="lightbox[751]" title="compiler_arguments2"><img class="alignnone size-thumbnail wp-image-753" title="compiler_arguments2" src="http://www.flashdevelop.de/wp-content/uploads/2012/01/compiler_arguments2-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/allgemein/conditional-compilation-und-inline.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aus getPixel32 den RGB und Alpha Wert erhalten</title>
		<link>http://www.flashdevelop.de/actionscript-3/aus-getpixel32-den-rgb-und-alpha-wert-erhalten.html</link>
		<comments>http://www.flashdevelop.de/actionscript-3/aus-getpixel32-den-rgb-und-alpha-wert-erhalten.html#comments</comments>
		<pubDate>Tue, 03 Jan 2012 11:04:22 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Mathe]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=733</guid>
		<description><![CDATA[Die Methode getPixel32 liefert uns ein 32 Bit Integer und repräsentiert ein Farbwert mit einem Alphakanal (ARGB).  Die einzelnen Farbwerte bekommen wir durch Bit-Manipulation heraus. var colour:uint = 0xCC33DD66; var A:uint = color &#62;&#62; 24 &#38; 0xFF; // alpha var R:uint = color &#62;&#62; 16 &#38; 0xFF; // rot var G:uint = color &#62;&#62; 8 [...]]]></description>
			<content:encoded><![CDATA[<p>Die Methode getPixel32 liefert uns ein 32 Bit Integer und repräsentiert ein Farbwert mit einem Alphakanal (ARGB).  Die einzelnen Farbwerte bekommen wir durch <a title="Bit-Manipulation" href="http://www.flashdevelop.de/programmierung/bit-manipulation.html">Bit-Manipulation</a> heraus.</p>
<pre class="brush:as3">var colour:uint = 0xCC33DD66;

var A:uint = color &gt;&gt; 24 &amp; 0xFF; // alpha
var R:uint = color &gt;&gt; 16 &amp; 0xFF; // rot
var G:uint = color &gt;&gt; 8 &amp; 0xFF;  // grün
var B:uint = color &amp; 0xFF;       // blau</pre>
<p>Die Methode getPixel wird gleichermaßen errechnet, nur mit ein Wert weniger.<span id="more-733"></span></p>
<pre class="brush:as3">var color:uint = 0x33DD66;
var R:uint = color &gt;&gt; 16 &amp; 0xFF;
var G:uint = color &gt;&gt; 8  &amp; 0xFF;
var B:uint = color &amp; 0xFF;</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/actionscript-3/aus-getpixel32-den-rgb-und-alpha-wert-erhalten.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ein Bild proportional skalieren</title>
		<link>http://www.flashdevelop.de/actionscript-3/ein-bild-proportional-skalieren.html</link>
		<comments>http://www.flashdevelop.de/actionscript-3/ein-bild-proportional-skalieren.html#comments</comments>
		<pubDate>Mon, 05 Dec 2011 16:23:54 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=708</guid>
		<description><![CDATA[Mit einer Matrix lässt sich ein Bild sehr einfach proportional skalieren.  Die folgende Funktion skaliert ein BitmapData &#8211; Object proportional und hält die eingegebenen Maximalgrößen ein. // image ist ein verknüpftes Bild in der Bibliothek var c:BitmapData = new image(0,0); // skalieren und anzeigen var b:Bitmap = new Bitmap(getScaledBitmapData(c, 100, 100)); // Glättung des Bildes, [...]]]></description>
			<content:encoded><![CDATA[<p>Mit einer Matrix lässt sich ein Bild sehr einfach proportional skalieren.  Die folgende Funktion skaliert ein BitmapData &#8211; Object proportional und hält die eingegebenen Maximalgrößen ein.<span id="more-708"></span></p>
<pre class="brush:as3">// image ist ein verknüpftes Bild in der Bibliothek
var c:BitmapData = new image(0,0);

// skalieren und anzeigen
var b:Bitmap = new Bitmap(getScaledBitmapData(c, 100, 100));

// Glättung des Bildes, fall man noch mehr machen möchte (rotieren etc)
b.smoothing = true; 

addChild(b);

/**
 * Skaliert ein BitmapData-Object proportional
 * @param scale 	Das BitmapData-Object
 * @param maxWidth	maximale Breite
 * @param maxHeight	maximale Höhe
 *
 * @return 	ein neues skaliertes BitmapData-Object
 */
function getScaledBitmapData(scale:BitmapData, maxWidth:Number, maxHeight:Number):BitmapData
{
	// Skalierungsfactor berechnen
	var wt:Number = maxWidth / scale.width;
	var ht:Number = maxHeight / scale.height;

	// kleinsten Wert bestimmen, damit maxWidth oder maxHeight nicht überschritten wird
	var factor:Number = Math.min(ht, wt);

	// Matrix mit Skalierungsfaktor erstellen und ein neues BitmapData-Object erstellen
	var m:Matrix = new Matrix();
	m.scale(factor, factor);
	var bd:BitmapData = new BitmapData(scale.width * factor, scale.height * factor, false);
	bd.draw(scale, m, null, null, null, true);
	return bd;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/actionscript-3/ein-bild-proportional-skalieren.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FDT 5 veröffentlicht</title>
		<link>http://www.flashdevelop.de/allgemein/fdt-5-veroffentlicht.html</link>
		<comments>http://www.flashdevelop.de/allgemein/fdt-5-veroffentlicht.html#comments</comments>
		<pubDate>Thu, 27 Oct 2011 13:24:28 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[fdt]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=698</guid>
		<description><![CDATA[Nun ist es soweit, das lang ersehnte FDT 5 ist da. Das besondere an dieser Version ist, das neue Preismodell. FDT5 gibt es nur noch als FDT 5 free und und FDT 5 Max. Die free Version ist eine gute Alternative zu FlashDevelop und läuft unter Windows, OSX und Linux. Probiert es einfach aus unter http://fdt.powerflasher.com]]></description>
			<content:encoded><![CDATA[<p>Nun ist es soweit, das lang ersehnte FDT 5 ist da. Das besondere an dieser Version ist, das neue Preismodell. FDT5 gibt es nur noch als <em>FDT 5 free</em> und und <em>FDT 5 Max.</em> Die <em>free</em> Version ist eine gute Alternative zu FlashDevelop und läuft unter Windows, OSX und Linux.</p>
<p>Probiert es einfach aus unter <a title="FDT 5" href="http://fdt.powerflasher.com/" target="_blank">http://fdt.powerflasher.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/allgemein/fdt-5-veroffentlicht.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone App Entwicklung mit FDT und ANT</title>
		<link>http://www.flashdevelop.de/programmierung/iphone-app-entwicklung-mit-fdt-und-ant.html</link>
		<comments>http://www.flashdevelop.de/programmierung/iphone-app-entwicklung-mit-fdt-und-ant.html#comments</comments>
		<pubDate>Mon, 28 Feb 2011 22:07:06 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[fdt]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=668</guid>
		<description><![CDATA[Da nun das iPhone auch ohne Vertrag der deutschen Telekom erhältlich ist, habe ich mir gleich eins zugelegt. Anschließend befasste ich mich mit der Entwicklung von Apps mit Flash. Leider habe ich zu diesem Thema nicht sehr viel im Internet gefunden und habe vieles ausprobiert und wieder verworfen und bin nun zu einem recht ordentlichem [...]]]></description>
			<content:encoded><![CDATA[<p>Da nun das iPhone auch ohne Vertrag der deutschen Telekom erhältlich ist, habe ich mir gleich eins zugelegt. Anschließend befasste ich mich mit der Entwicklung von Apps mit Flash. Leider habe ich zu diesem Thema nicht sehr viel im Internet gefunden und habe vieles ausprobiert und wieder verworfen und bin nun zu einem recht ordentlichem Ergebnis gekommen. Ob dies die beste Lösung ist, kann ich nicht sagen. Außerdem werde ich in diesem Beitrag nicht auf die Erstellung eines <em>Apple Developer Account</em> und die Erstellung eines Zertifikates eingehen, mehr dazu am Ende des Beitrages.</p>
<p>Was wir benötigen:</p>
<ol>
<li><a title="Flex 4 SDK" href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4" target="_blank">Flex4 SDK bekommt von Adobe</a></li>
<li><a title="Packager für iPhone" href="http://labs.adobe.com/technologies/packagerforiphone/" target="_blank">Packager für das iPhone von Adobe</a></li>
<li><a title="Antform" href="http://antforms.sourceforge.net" target="_blank">AntForm</a></li>
<li><a title="FDT iPhone Template" href="http://www.flashdevelop.de/wp-content/uploads/2011/02/FDT.zip">FDT iPhone Template</a></li>
</ol>
<p><strong><span id="more-668"></span>Flex4 und iPhone SDK einrichten:</strong></p>
<p>Das iPhone Package ist nur eine Erweiterung für das Flex SDK, daher muss zunächst das Flex 4 SDK entpackt werden. Anschließend werden die vorhandenen Dateien mit dem iPhone Package ersetzt. Ich habe mir hierzu ein eigenen Ordner angelegt und das SDK in FDT wie folgt eingetragen. Die roten Zahlen in dem Bild sind die einzelnen Schritte.</p>
<div id="attachment_671" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.flashdevelop.de/wp-content/uploads/2011/02/add_sdk.jpg" rel="lightbox[668]" title="add_sdk"><img class="size-medium wp-image-671" title="add_sdk" src="http://www.flashdevelop.de/wp-content/uploads/2011/02/add_sdk-300x228.jpg" alt="" width="300" height="228" /></a><p class="wp-caption-text">SDK hinzufügen</p></div>
<p>Hab könnte man gleich mit einem Flex4 Air Projekt anfangen, es muss lediglich das SDK mit dem iPhone Package ausgewählt werden. Mit dem <em>pfi Compiler</em>, der sich in dem SDK Ordner befindet <em>lib/pfi.jar</em> oder <em>bin/pfi.bat</em>, kann aus der <em>swf</em> eine für das iPhone lauffähige <em>ipa</em> Datei erstellt werden.</p>
<p><strong>Das Template:</strong></p>
<p>Das Template legt bei der Projekterstellung alle wichtigen Dateien und Verzeichnisse an. Die Compiler Einstellungen werden ebenfalls angepasst. Da ich FTD unter Windows benutze, ist die Beschreibung für Mac OSX entwas anders. Das Template muss zuerst in das FDT Verzeichnis entpackt werden. Bei mir befindet sich dies in den <em>Anwendungsdaten</em> unter <em>Dokumente und Einstellungen</em>, die standart Templates sollten dort zu sehen sein. Jetzt können wir FDT starten und ein neues Projekt erstellen.</p>
<div id="attachment_680" class="wp-caption aligncenter" style="width: 262px"><a href="http://www.flashdevelop.de/wp-content/uploads/2011/02/create_iphone_project1.jpg" rel="lightbox[668]" title="create_iphone_project1"><img class="size-medium wp-image-680" title="create_iphone_project1" src="http://www.flashdevelop.de/wp-content/uploads/2011/02/create_iphone_project1-252x300.jpg" alt="" width="252" height="300" /></a><p class="wp-caption-text">Shritt 1 - 4</p></div>
<div id="attachment_681" class="wp-caption aligncenter" style="width: 262px"><a href="http://www.flashdevelop.de/wp-content/uploads/2011/02/create_iphone_project2.jpg" rel="lightbox[668]" title="create_iphone_project2"><img class="size-medium wp-image-681" title="create_iphone_project2" src="http://www.flashdevelop.de/wp-content/uploads/2011/02/create_iphone_project2-252x300.jpg" alt="" width="252" height="300" /></a><p class="wp-caption-text">Schritt 5 - 6</p></div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">http://blubl.geoathome.at/2010/09/flash-iphone-entwicklung-mit-flashdevelop-und-dem-adobe-packager-for-iphone/</div>
<p>Nun ist das Grundgerüst des Projektes erstellt.</p>
<div id="attachment_677" class="wp-caption aligncenter" style="width: 262px"><a href="http://www.flashdevelop.de/wp-content/uploads/2011/02/create_iphone_project3.jpg" rel="lightbox[668]" title="create_iphone_project3"><img class="size-medium wp-image-677" title="create_iphone_project3" src="http://www.flashdevelop.de/wp-content/uploads/2011/02/create_iphone_project3-252x300.jpg" alt="" width="252" height="300" /></a><p class="wp-caption-text">Templatestrukur</p></div>
<p><strong>Wichtige Hinweise der Struktur:</strong></p>
<p>*<strong> assets </strong>hier könnte die Projekt FLA hinein, die assets.fla.</p>
<p>* <strong>src </strong>beinhaltet die Sourcen des Projektes, die Main.as wird vom ANT Build als Einstiegspunkt genommen.</p>
<p>* <strong>bin </strong>hier wird die SWF abgelegt. Die Bilder im Verzeichnis icons werden vom <em>pfi </em>zwingend benötigt. Dies sind die Icons die im Store und auf dem iPhone angezeigt werden.</p>
<p>* <strong>build</strong> beinhaltet die benötigten Ant Dateien. Antform wird für die Auswahl des IPA Types und die Eingabe des Passwortes benötigt. In der build.property werden ein paar Einstellungen die für das Antbuild benötigt werden eingetragen. Diese könnte wie folgt aussehen</p>
<pre class="brush:bash">appName = MeinAppName
dirFlexSDK  = C:/Develop/flex_sdk_4.1.0.16076_packagerforiphone_v2_win_101110
pfi = ${dirFlexSDK}/bin/pfi.bat

certificateFile = iphone_dev.p12
provisioningFile = iphone_dev.mobileprovision

flashPlayerDebug = ${dirFlexSDK}/bin/adl.exe

mxmlc=${dirFlexSDK}/bin/mxmlc.exe

addClassPaths = 'C:/Develop/greensock/bonus-all-v11/AS3'</pre>
<p>Durch <em>appName </em>wird nach dem Build eine Flashdatei <em>MeinAppName.swf</em> im bin Ordner liegen. dirFlexSDK gibt den Ort des <em>Flex4 SDK mit dem iPhone package</em> an, pfi den Ort des IPA Compilers. Da ich unter Windows arbeite, bietet sich die <em>pfi.bat</em> an, diese kann dem <em>pfi</em> mehr Ressourcen gönnen. Zur Erläuterung für Mac OSX, die pfi.bat startet die lib/pfi.jar, daher könnte auch ${dirFlexSDK}/lib/pfi.jar angeben werden, es muss allerdings die build.xml angepasst werden &lt;java jar=&#8221;${pfi}&#8221; fork=&#8221;true&#8221; failonerror=&#8221;true&#8221;&gt; &lt;arg value=&#8221;-package&#8221;/&gt;&#8230;&#8230; Evtl. könnte man sich auch ein pfi.command schreiben. <em>certificateFile </em>und <em>provisioningFile</em> sind die Zertifikate von Apple. Der Rest ist euch bestimmt schon bekannt durch<a title="Apache Ant mit FlashDevelop" href="http://www.flashdevelop.de/programmierung/anleitung-teil-3-apache-ant-mit-flashdevelop.html"> Apache Ant mit FlashDevelop</a>.</p>
<p>* <strong>certificates </strong>hier müssen die Zertifikate hinein.</p>
<p>* <strong>iPhone </strong>beinhaltet die erstellte IPA Datei</p>
<p>* <strong>lib </strong>hier liegen die benötigten SWCs, die assets.swc</p>
<p>* application.xml muss laut pfi im Root Ordner liegen, hier werden Angaben zur App gemacht.</p>
<p>* <strong>Default.png</strong> muss auch laut pfi im Root Ordner liegen.</p>
<p><strong><br />
</strong></p>
<p><strong>IPA für das iPhone erstellen:</strong></p>
<p>Das Erstellen der <em>IPA</em> wird von Ant übernommen. Gestartet wird es wie folgt:</p>
<div id="attachment_685" class="wp-caption aligncenter" style="width: 262px"><a href="http://www.flashdevelop.de/wp-content/uploads/2011/02/create_iphone_project4.jpg" rel="lightbox[668]" title="create_iphone_project4"><img class="size-medium wp-image-685" title="create_iphone_project4" src="http://www.flashdevelop.de/wp-content/uploads/2011/02/create_iphone_project4-252x300.jpg" alt="" width="252" height="300" /></a><p class="wp-caption-text">Compile IPA mit Ant Schritt 1</p></div>
<p>Nun wird das Ant Build ausgeführt und es wird ein Eingabefenster angezeigt.</p>
<div id="attachment_686" class="wp-caption aligncenter" style="width: 262px"><a href="http://www.flashdevelop.de/wp-content/uploads/2011/02/create_iphone_project5.jpg" rel="lightbox[668]" title="create_iphone_project5"><img class="size-medium wp-image-686" title="create_iphone_project5" src="http://www.flashdevelop.de/wp-content/uploads/2011/02/create_iphone_project5-252x300.jpg" alt="" width="252" height="300" /></a><p class="wp-caption-text">Compile IPA mit Ant Schritt 2</p></div>
<ol>
<li>IPA Type</li>
<li>GPU Renderdiagnose, wird nur im ipa-test oder ipa-debug berücksichtigt.</li>
<li>Das Passwort für das Zertifikat</li>
<li>Starten des pfi Comilers. Es kann einige Minuten dauern, bis das Ergebnis vorliegt.</li>
</ol>
<p>Einen besonderen Dank möchte ich an <a class="bigusername" rel="nofollow" href="http://www.flashforum.de/forum/member.php?u=10060">_geo </a>aussprechen, der mich mit seinem Beitrag <a title="Flash iPhone Entwicklung mit FlashDevelop und dem Adobe &quot;Packager for iPhone&quot;" href="http://blubl.geoathome.at/2010/09/flash-iphone-entwicklung-mit-flashdevelop-und-dem-adobe-packager-for-iphone/" target="_blank"><em>Flash iPhone Entwicklung mit FlashDevelop und dem Adobe &#8220;Packager for iPhone&#8221;</em></a> inspiriert hat. Dort findet ihr eine Anleitung für FlashDevelop, und viele Details zur IPA und dem Zertifikat.</p>
<p>Alle Details zum packanger für iPhones findet hier bei Adobe unter  <a href="http://download.macromedia.com/pub/labs/packagerforiphone/packagerforiphone_devguide.pdf" target="_blank">http://download.macromedia.com/pub/labs/packagerforiphone/packagerforiphone_devguide.pdf</a></p>
<p><strong>UPDATE</strong> (18. März 2011 20:34) Template Version 1.1</p>
<ul>
<li> <em>ProjectTypes </em>rausgeflogen, es wird jetzt das Standart <em>AS3 Air</em> benutzt</li>
<li>Der Projektname wird in den Dateien () ersetzt.</li>
<li>Application ID kann optional hinzugefügt werden</li>
<li>Der Ordner <em>libs </em>wird automatisch in den <em>buildpath </em>eingefügt</li>
<li>Eine launch Datei wird angelegt und automatisch hinzugefügt</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/programmierung/iphone-app-entwicklung-mit-fdt-und-ant.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Integer Minimal- und Maximalwert</title>
		<link>http://www.flashdevelop.de/actionscript-3/integer-minimal-und-maximalwert.html</link>
		<comments>http://www.flashdevelop.de/actionscript-3/integer-minimal-und-maximalwert.html#comments</comments>
		<pubDate>Fri, 12 Nov 2010 09:52:10 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=658</guid>
		<description><![CDATA[Diese Funktion hält ein Integer in einem vorgegebenem Bereich. val ist der Integerwert der in dem Bereich bleiben soll. min ist der minimale Wert. max ist der maximale Wert. public function intRange(val:int, min:int, max:int):int { return val &#60; min ? min : (val &#62; max ? max : val); }]]></description>
			<content:encoded><![CDATA[<p>Diese Funktion hält ein Integer in einem vorgegebenem Bereich.<br />
<em>val </em>ist der Integerwert der in dem Bereich bleiben soll.<br />
<em>min </em>ist der minimale Wert.<br />
<em>max </em>ist der maximale Wert.</p>
<pre class="brush:as3">public function intRange(val:int, min:int, max:int):int
{
	return val &lt; min ? min : (val &gt; max ? max : val);
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/actionscript-3/integer-minimal-und-maximalwert.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bit-Manipulation</title>
		<link>http://www.flashdevelop.de/programmierung/bit-manipulation.html</link>
		<comments>http://www.flashdevelop.de/programmierung/bit-manipulation.html#comments</comments>
		<pubDate>Mon, 08 Nov 2010 20:13:17 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Beispiel]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[programm]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=621</guid>
		<description><![CDATA[Bei Bit-Manipulationen spart man sich viele Abfragen oder Statusvariablen und eignet sich zum Beispiel gut für Vergleiche. Die Theorie: Ein Integer besteht aus 32 Bit. Diese Bits können in Binär oder Hexadezimal sehr schön dargestellt werden. Binär : 11110000111100001111000011110000 Hexadezimal: 0xF0F0F0F0 Dezimal : 4042322160 Im Binärsystem seht jede Ziffer für ein Bit. 1 bedeutet das [...]]]></description>
			<content:encoded><![CDATA[<p>Bei Bit-Manipulationen spart man sich viele Abfragen oder Statusvariablen und eignet sich zum Beispiel gut für Vergleiche.</p>
<h3>Die Theorie:</h3>
<p>Ein Integer besteht aus 32 Bit. Diese Bits können in Binär oder Hexadezimal sehr schön dargestellt werden.</p>
<pre>Binär      : 11110000111100001111000011110000
Hexadezimal: 0xF0F0F0F0
Dezimal    : 4042322160</pre>
<p>Im <a title="Dualsystem" href="http://de.wikipedia.org/wiki/Dualsystem" target="_blank">Binärsystem</a> seht jede Ziffer für ein Bit. 1 bedeutet das Bit ist gesetzt und 0 nicht gesetzt. Im <a title="Hexadezimalsystem" href="http://de.wikipedia.org/wiki/Hexadezimalsystem" target="_blank">Hexadezimalsystem</a> werden vier Bits in einer Ziffer dargestellt. 0x symbolisiert lediglich, dass es sich um eine Hexadezimalzahl handelt.</p>
<p>Folgende Bit &#8211; Operatoren werden wir benötigen:</p>
<pre>Links schieben : &lt;&lt;
Rechts schieben: &gt;&gt;
UND verknüpfen : &amp;
ODER verknüpfen: |
Exclusive ODER : ^
Einerkomplement: ~</pre>
<h4><span id="more-621"></span>Links schieben:</h4>
<p>Anweisung in Dezimal:</p>
<pre class="brush:as3">var foo:int = 1&lt;&lt;1;</pre>
<p>Die Variable foo hat den Wert 2 nach der Operation, es wird praktisch mal zwei genommen. Aus Binärsicht wird einfach eine <strong>0</strong> von <strong>RECHTS </strong>hineingeschoben.<br />
Binäredarstellung:</p>
<pre>0001
0010</pre>
<h4>Rechts schieben:</h4>
<p>Anweisung in Deziemal:</p>
<pre class="brush:as3">var foo:int = 2&gt;&gt;1;</pre>
<p>Die  Variable foo hat den Wert 1 nach der Operation, es wird praktisch durch zwei geteilt. Aus Binärsicht wird einfach eine <strong>0</strong> von <strong>LINKS </strong>hineingeschoben.<br />
Binäredarstellung:</p>
<pre>0010
0001
</pre>
<p>Hätten wir 1&gt;&gt;1 genommen, wäre die 1 rechts rausgefallen und hätten dann 0 und nicht 0.5, da wir im Integer Bereich arbeiten.</p>
<h4>UND verknüpfen:</h4>
<p>Anweisung in Dezimal:</p>
<pre class="brush:as3">var foo:int = 3&amp;1;</pre>
<p>Die  Variable foo hat den Wert 1 nach der Operation. Bei UND Verknüpfungen ist 1 UND 1 wahr, 1 UND 0 falsch, und 0 UND 0 ebenfalls falsch. D. h. 1&amp;1 = 1, 1&amp;0 = 0 und 0&amp;0 = 0.<br />
Binärdarstellung:</p>
<pre>0011  // Dez: 3
0001  // Dez: 1
----
0001  // Dez: 1
</pre>
<h4>ODER verknüpfen:</h4>
<p>Anweisung in Dezimal:</p>
<pre class="brush:as3">var foo:int = 2|1;</pre>
<p>Die  Variable foo hat den Wert 3 nach der Operation. Im Gegensatz du der UND-Verknüpfung ist es immer wahr, sobald eins der Bits 1 ist.<br />
Binärdarstellung:</p>
<pre>0010  // Dez: 2
0001  // Dez: 1
----
0011  // Dez: 3
</pre>
<h4>Exclusive ODER verknüpfen:</h4>
<p>Anweisung in Dezimal:</p>
<pre class="brush:as3">var foo:int = 6^5;</pre>
<p>Die  Variable foo hat den Wert 3 nach der Operation. Bei exlusive ODER ist es nur wahr wenn die Bits unterschiedlich sind.<br />
Binärdarstellung:</p>
<pre>0110  // Dez: 6
0101  // Dez: 5
----
0011  // Dez: 3</pre>
<h4>Einerkomplement:</h4>
<p>Anweisung in Dezimal:</p>
<pre class="brush:as3">var foo:int = 3&amp;~1;</pre>
<p>Die  Variable foo hat den Wert 2 nach der Operation. Hierbei sind zwei Schritte erforderlich. Die Bits der 1 müssen zunächst invertiert werden, die 0 wird zu 1 und die 1 zu 0. Anschließend werden die invertierten Bits UND verknüpft.<br />
Binärdarstellung:</p>
<pre>0011  // Dez: 3
0001  // Dez: 1

0011
1110  // invertiertes 0001
----
0010  // Dez: 2
</pre>
<h3>Die Praxis:</h3>
<p>Nehmen wir an, wir müssen ein Spiel oder eine Anwendung erstellen, in dem wir verschiedenfarbige Briefumschläge haben und ein Umschlag kann eine oder mehrere Sachen beinhalten. Es gibt also grüne, blaue, gelbe und rote Umschläge und als Sache Buch, Rechnung und CD. Vielleicht gibt es auch noch intern, öffentlich, private oder geschäftlich.</p>
<p>Wir definieren uns in einer Klasse,  z.B. Envelope, folgende Konstanten und setzen unsere Bits. Zu dem benötigen wir noch eine Variable, die den Brieftyp beinhaltet.</p>
<pre class="brush:as3">public static const GREEN:uint      = 1&lt;&lt;0;
public static const BLUE:uint       = 1&lt;&lt;1;
public static const YELLOW:uint     = 1&lt;&lt;2;
public static const RED:uint        = 1&lt;&lt;3;

public static const BOOK:uint       = 1&lt;&lt;20;
public static const INVOICE:uint    = 1&lt;&lt;21;
public static const CD:uint         = 1&lt;&lt;22;

public static const INTERN:uint     = 1&lt;&lt;28;
public static const PUBLIC:uint     = 1&lt;&lt;29;
public static const PRIVATE:uint    = 1&lt;&lt;30;
public static const COMMERCIAL:uint = 1&lt;&lt;31;

private var _type:uint;
</pre>
<p>Das setzen der richtigen Bits übernimmt zum Glück der Computer für uns und müssen lediglich rechts schieben. Warum wir nicht einfach die Werte 1, 2,3, 4, 5&#8230;. geben, liegt daran, dass wir nicht die Zahlen vergleichen werden, sondern den Vergleich auf Bit ebene vornehmen. D. h. wenn das erste Bit von <em>_type</em> gesetzt ist, ist der Umschlag grün. Man könnte ihn auch grün, rot machen, in dem man das erste und das vierte Bit setzt.</p>
<p>Die Bits der Farben sind also wie folgt gesetzt:</p>
<pre>0001  // GREEN
0010  // BLUE
0100  // YELLOW
1000  // RED</pre>
<p>An diesem Beispiel sehen wir auch, was passiert, wenn wir den <em>public static const YELLOW:uint = 3;</em> gesagt hätten. Die Dezimalzahl 3 ist in Binär 0011 und es hieße für uns, dass der Umschlag grün und blau ist. Spätestens wenn wir den ODER und UND Operator verwenden, dürfte dies jedem klar werden.</p>
<p>Einen roten Umschalg zu setzen und zu testen, ob dieser eine bestimmte Farbe hat, ist an dieser Stelle nich wirklich spannend.</p>
<pre class="brush:as3">_type = RED;  // roter Umschlag

// auf Farbe testen
if (_type ==  RED)
{
// Umschlag ist rot
}</pre>
<p>Bits von _type:  1000</p>
<p>Spannender wird es wenn wir nun einen roten Umschlag mit einem Buch haben wollen, d. h. wir müssen das vierte und fünfte Bit setzen und genau jetzt kommt unser ODER Operator ins Spiel. Mit ODER können wir die Bits setzen.</p>
<pre class="brush:as3">_type = RED | BOOK;</pre>
<p>In Binär:</p>
<pre>00001000  // RED
00010000  // BOOK
--------
00011000 // ODER verknüpft</pre>
<p>Siehe da, wir haben im _type das Bit für <em>RED</em> und <em>BOOK</em> gesetzt. Ab jetzt können wir nicht mehr ganz so einfach auf auf <em>RED </em>testen, da 00011000 nicht 000010000 ist. Um auf einen Wert zu prüfen, benötigen wir den UND Operator.</p>
<pre class="brush:as3">if (_type&amp;RED &gt; 0)
{
// ist rot
}
else
{
// ist nicht rot
}

if (_type&amp;BOOK &gt; 0)
{
// hat Buch
}</pre>
<p>Schauen wir uns mal die Binärzahlen an, was mit der UND verknüpfung passiert:</p>
<pre>00011000  // BOOK|RED  Dez: 24
00001000  // RED       Dez:  4
--------
00001000  // RED       Dez: 4</pre>
<p>Dadurch, dass man die Bits UND verknüpft, fallen alle nicht überinstimmenden Bits weg und wir bekommen als Ergebnis das UND verknüpfte oder 0, wenn dies nicht gesetzt wurde. Siehe folgendes Beispiel</p>
<pre>00011000  // BOOK|RED  Dez: 24
00000001  //GREEN      Dez:  1
--------
00000000  //           Dez:  0</pre>
<p>Es gibt viele verschiedene Kombinationen mit denen man prüfen kann. Möchte man wissen, ob der Umschlag überhaupt eine Farbe hat.</p>
<pre>00011000  // BOOK|RED               Dez: 24
00001111  // GREEN|BLUE|YELLOW|RED  Dez: 15
00001000  // RED                    Dez:  4</pre>
<p>Beide if &#8211; Anweisungen sind binär gesehen identisch</p>
<pre class="brush:as3">if (_type &amp;(GREEN|BLUE|YELLOW|RED) &gt; 0)
...

if (_type&amp;(0xF) &gt;0)
...</pre>
<p>0xF ist eine Hexadezimalzahl, man könnte sie auch mit führender 0 schreiben 0x0F und ist in Binär 00001111</p>
<p><strong>Merke:</strong></p>
<p><strong>Mehrere Bits werden mit ODER gesetzt und mit UND überprüft.<br />
BIT|BIT und BIT&amp;BIT<br />
</strong></p>
<p>Wenn wir einen blauen Umschlag mit einer CD und einer Rechnung haben, wollen aber gerne die Rechnung entfernen, so müssen wir einfach den Bit für die Rechnung löschen. Gelöscht wird mit dem Einerkomplement.</p>
<pre class="brush:as3">_type = CD|BLUE|INVOICE;
_type &amp;=~INVOICE; // ist das gleiche wie _type = _type&amp;~INVOICE;</pre>
<p>Schauen wir uns das Ganze in Binär an</p>
<pre>11000000000000000000010  // CD|BLUE|INVOICE
01000000000000000000000  //  INVOICE
10111111111111111111111  // ~INVOICE (invertiert)
</pre>
<pre>_type &amp;=~INVOICE
11000000000000000000010  // _type
10111111111111111111111  // UND verknüpfen ~INVOICE
--------------------------------------
10000000000000000000010  // CD|BLUE</pre>
<p>Hier sehen wir sehr schön, dass das Bit für INVOICE entfernt wurde, bzw. auf 0 gesetzt wurde.</p>
<p>Zum Schluss zeige ich noch wie man höhere Bits eines Bereiches löschen kann. Wir haben zum Beispiel die beiden höchsten Bits gesetzt und wollen gerne die vier höchsten Bits löschen, also müssen wir eine UND Verknüpfung durchführen, in dem die obersten Bits auf 0 gesetzt sind.</p>
<p>_type = BLUE|INVOICE|PRIVATE|COMMERCIAL;<br />
_type &amp;= 0x0FFFFFFF;</p>
<pre>11000000001000000000000000000010  // BLUE|INVOICE|PRIVATE|COMMERCIAL
00001111111111111111111111111111  // 0x0FFFFFFF oder ~(PRIVATE|PUBLIC|INTERN|COMMERCIAL)
00000000001000000000000000000010 // BLUE|INVOICE</pre>
<p>_type &amp;=~(PRIVATE|PUBLIC|COMMERCIAL|INTERN) würde zum gleichen Ergebnis führen.</p>
<p><strong>Merke:</strong></p>
<p><strong>Bits werden gelöscht in dem der Einerkomplement UND verknüpft wird<br />
BIT &amp; ~BIT</strong></p>
<p>Wollt ihr zwei Typen vertauschen, also a nach b und b nach a kopieren, gelingt euch das am schnellsten ohne temporäre Variablen anzulegen, mit dem exclusive ODER.</p>
<pre class="brush:as3">_type1 = BLUE;
_type2 = RED;

_type1 ^= _type2;
_type2 ^= _type1;
_type1 ^= _type2;</pre>
<p>In Binär sieht das so aus, ihr nehmt Stift und Zettel und schreibt die Binärzahlen auf und rechnet dies wie in der Theorie gezeigt aus.</p>
<h3>TIPS:</h3>
<p>Wenn ihr die Eins Zweiundreisig mal links schiebt (1&lt;&lt;32)  fängt es wieder bei 1 an, da ein Integer nur 32 Bit hat.</p>
<p>Das exclusive ODER tauschen funktioniert mit jedem Integer.</p>
<pre class="brush:as3">var a:int = 5;
var b:int = 2;

trace(a + " und " + b) // output: 5 und 2

a ^= b;
b ^= a;
a ^= b;

trace(a + " und " + b) // output: 2 und 5
</pre>
<p>Wen ihr herausfinden wollt, wie oft eine  Zahl nach links geschoben wurde, müssen wir logarithmieren.  Das Schieben nach links ist nichts anderes als y = 2<sup>x</sup>, dann ist x = log<sub>2</sub>(y).</p>
<pre class="brush:as3">1&lt;&lt;2 = 2²
1&lt;&lt;3 = 2³</pre>
<p>Da in den meisten Programmiersprachen nur der logarithmus naturalis (ln) zur Verfügung steht, müssen wir diesen umrechnen.  Unsere Formel lautet dem nach x = log<sub>e</sub>(y) / log<sub>e</sub>(2)</p>
<p>In ActionScript 3 ist unser natürlicher Logarithmus zur Basis e Math.log().</p>
<pre class="brush:as3">var x:int  = Math.log(y)/Math.log(2);</pre>
<p>Da die Klasse Math den Math.log(2) als Konstante ausgerechnet hat, können wir uns ein wenig Rechenzeit sparen und scheiben</p>
<pre class="brush:as3">var x:int = Math.log(y) / Math.LN2;</pre>
<p>Zu Beachten ist auch, dass wir in einigen Fällen Nachkommastellen haben. Das passiert, wenn wir einen ODER verknüpften Wert nehmen. Es gibt verschiedene Möglichkeiten abzurunden, da wir uns  in der Bitmanipulation befinden, benutzen wir doch gleich rechts schieben. Einmal nach rechts schieben entspricht Division durch 2 mit Abrunden.</p>
<pre class="brush:as3">var x:int = Math.log(y) / Math.LN2 &gt;&gt; 0;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/programmierung/bit-manipulation.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FlashDevelop 3.3.1 RTM</title>
		<link>http://www.flashdevelop.de/allgemein/flashdevelop-3-3-1-rtm.html</link>
		<comments>http://www.flashdevelop.de/allgemein/flashdevelop-3-3-1-rtm.html#comments</comments>
		<pubDate>Sun, 07 Nov 2010 14:28:39 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[FlashDevelop]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=649</guid>
		<description><![CDATA[Es zwar schon eine Weile her, die aktuelle Version von FlashDevelop ist derzeit 3.3.1 RTM. Diese behebt einige Bugs aus der 3.3.0 RTM und ist kompatiebel mit RC2 &#8211; 3.3.0 RTM. Das Programm gibt es bei FlashDevelop.org]]></description>
			<content:encoded><![CDATA[<p>Es zwar schon eine Weile her, die aktuelle Version von FlashDevelop ist derzeit 3.3.1 RTM. Diese behebt einige Bugs aus der 3.3.0 RTM und ist kompatiebel mit RC2 &#8211; 3.3.0 RTM.</p>
<p>Das Programm gibt es bei <a title="FlashDevelop 3.3.1 RTM released" href="http://www.flashdevelop.org/community/viewtopic.php?f=11&amp;t=7368&amp;sid=07aba3d4a9df8ac05d00a472c2c8e07f" target="_blank">FlashDevelop.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/allgemein/flashdevelop-3-3-1-rtm.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unterschiede zwischen den drei Includes der SWC in FlashDevelop</title>
		<link>http://www.flashdevelop.de/allgemein/unterschiede-zwischen-den-drei-includes-der-swc-in-flashdevelop.html</link>
		<comments>http://www.flashdevelop.de/allgemein/unterschiede-zwischen-den-drei-includes-der-swc-in-flashdevelop.html#comments</comments>
		<pubDate>Tue, 24 Aug 2010 20:52:53 +0000</pubDate>
		<dc:creator>A. Khong</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[SWC]]></category>

		<guid isPermaLink="false">http://www.flashdevelop.de/?p=606</guid>
		<description><![CDATA[Wie ihr sicher bemerkt habt, gibt es drei verschiedene Möglichkeiten eine SWC einzubinden. Nach dem die SWC mit Add To Library dem Projekt hinzugefügt wurde, gibt es die Optionen Library (inlcude referenced classs) Include library (include completely) External libratry (not included) Zu Punkt 1: Hier werden nur die Klassen importiert, die auch tatsächlich genutzt werden. [...]]]></description>
			<content:encoded><![CDATA[<p>Wie ihr sicher bemerkt habt, gibt es drei verschiedene Möglichkeiten eine SWC einzubinden.</p>
<p>Nach dem die SWC mit <em>Add To Library </em>dem Projekt hinzugefügt wurde, gibt es die Optionen</p>
<ol>
<li>Library (inlcude referenced classs)</li>
<li>Include library (include completely)</li>
<li>External libratry (not included)</li>
</ol>
<p><span id="more-606"></span>Zu Punkt 1:<br />
Hier werden nur die Klassen importiert, die auch tatsächlich genutzt werden. Es ist nicht möglich dynamisch Klassen zu nutzen, die vorher noch nicht referenziert wurden. Habe ich zum Beispiel zwei Verlinkungen in der SWC, einmal <em>assets.ball</em> und <em>assets.korb</em>. Wenn ich nun im Code <em>new assets.korb();</em> schreibe aber niemals new<em> assets.korb(); </em>so würde ich eine Fehlermeldung bekommen, wenn ich<em> loaderInfo.applicationDomain.getDefinition(&#8220;assets.korb&#8221;); </em>benutzen würde.<em> </em>Der Grund ist, da die Klasse zuvor nicht referenziert wurde. Nur ein <em>import assets.korb;</em> würde auch nicht ausreichen.</p>
<p>Zu Punkt 2:<br />
Mit dieser Option wird alles aus der SWC importiert, egal ob es benutzt oder nicht benutzt wird. Hier stehen alle Klassen aus der SWC zur Verfügung.</p>
<p>Zu Punkt 3:<br />
Hier wird die SWC nicht importiert und dient lediglich der Autovervollständigung. Die SWF muss zwingend vom Programm nachgeladen werden, ansonsten gibt es eine Fehlermeldung, da alle Klassen der SWC nicht vorhanden sind.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashdevelop.de/allgemein/unterschiede-zwischen-den-drei-includes-der-swc-in-flashdevelop.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

