Montag, 12. September 2011

Flex: SnapScroller

Da ich derzeit an meiner Master Thesis sitze und via Flex eine Mobil App erstellen möchte, ist mir folgendes aufgefallen. Flex 4.5 ist zwar echt nett was die Veröffentlichung von Apps auf mehreren Plattformen angeht, hat aber leider recht eingeschränkte Komponenten zum zusammenbauen. So fehlte mir dringend die Paging Funktion die man aus iOS kennt. Sprich man hat eine Scrollview, die seitenweise Inhalte präsentiert. Da ich auch nach längeren Suchen keine Möglichkeit gefunden habe die Scroller Komponente zu parametrisieren, habe ich sie einfach mal erweitert.

Beispiel (rote Fläche nach links wischen):




Dazu folgenden Quelltext

MXML:

<local:SnapScroller  x="0" y="0" width="320" height="460">
<s:HGroup gap="0" width="100%" height="100%" >
<s:Image source="assets/Startscreen_Portrait.png"/><s:Image x="320" source="assets/Startscreen_Portrait.png"/><s:Image x="640" source="assets/Startscreen_Portrait.png"/>
</s:HGroup>
</local:SnapScroller>
Wichtig ist, das die Komponente vom Typ SnapScroller- und der Container eine HGroup ist. Gap sollte auf 0 stehen damit die Elemente direkt nebeneinander liegen und nicht unnötig mit Spacern getrennt sind.

Die AS3 Komponente (derzeit nur horizontales snapping):

package
{
 package
{
 import flash.events.MouseEvent;
 import flash.events.TimerEvent;
 import flash.events.TouchEvent;
 import flash.ui.Mouse;
 import flash.ui.Multitouch;
 import flash.ui.MultitouchInputMode;
 import flash.utils.Timer;
 
 import flashx.textLayout.formats.Float;
 
 import mx.core.InteractionMode;
 import mx.core.ScrollPolicy;
 
 import spark.components.Group;
 import spark.components.Scroller;
 
 
 public class SnapScroller extends Scroller
 {
  private var isMouseDown:Boolean;
  private var xStart:Number;
  private var mouseUpDownXDistance : Number;
  private var t:Timer;
  private var nextHorizontalPosition: Number; 
  private var nextHorizontalPositionDistance : Number;
  
  public function SnapScroller()
  {
   super();
   
   this.setStyle('horizontalScrollPolicy',ScrollPolicy.OFF);
   this.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
   this.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
   
  }
  
  protected function onMouseDown(event:MouseEvent):void
  {
   this.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
   stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
   
   if (t)
    t.stop();
   
   isMouseDown = true;
   xStart = mouseX;
  }
  
  protected function onMouseMove(event:MouseEvent):void
  {
   if(isMouseDown)
   {
    mouseUpDownXDistance = mouseX-xStart;
    this.viewport.horizontalScrollPosition -= mouseUpDownXDistance;
    xStart = mouseX;
   }
  }
  
  protected function onMouseUp(event:MouseEvent):void
  {
   isMouseDown = false;
   
   if(mouseUpDownXDistance > 0)
    nextHorizontalPosition = (int(this.viewport.horizontalScrollPosition/this.width))*this.width;  
   else
    nextHorizontalPosition = (int(this.viewport.horizontalScrollPosition/this.width)+1)*this.width;
   
   if (nextHorizontalPosition > ((this.getElementAt(0) as Group).contentWidth)-this.width)
    nextHorizontalPosition = ((this.getElementAt(0) as Group).contentWidth)-this.width;
   
   t = new Timer(1,0);
   t.addEventListener(TimerEvent.TIMER,timerEnds);
   t.start();
   
   stage.removeEventListener(MouseEvent.MOUSE_UP,onMouseUp);
   this.removeEventListener(MouseEvent.MOUSE_UP,onMouseUp);
  }
  
  protected function timerEnds(event:TimerEvent):void
  {
   var distanceToTarget:Number = Math.abs(this.viewport.horizontalScrollPosition - nextHorizontalPosition);
   
   if(this.viewport.horizontalScrollPosition > nextHorizontalPosition)
    this.viewport.horizontalScrollPosition -= Math.sqrt(distanceToTarget);
    
   else
    this.viewport.horizontalScrollPosition += Math.sqrt(distanceToTarget);
   
   if (distanceToTarget < 0.01)    
   {     
    this.viewport.horizontalScrollPosition = nextHorizontalPosition;          
    t.stop();     
    t.removeEventListener(TimerEvent.TIMER,timerEnds);    
   }   
  }  
 } 
}

Tutorial Video

Dienstag, 16. August 2011

Synergy

Wer viel an 2 Computern z.B. einen Mac und einem PC gleichzeitig arbeitet, hat oft auch zwei Mäuse und Tastaturen vor sich liegen. Außerdem möchte man oft auch Copy/Paste von System zu System machen.

Abhilfe verschafft das Tool Synergy.

Man installiert es auf einem System (z.B. Mac) und auf einem anderen (z.B. PC) und startet auf einer Seite die Server Version und auf der anderen die Client Version. Die Serverversion shared nun Keyboard und Maus mit dem Client. Sprich man kann mit der Maus zum anderen Bildschirm wechseln und eingaben via Tastatur tätigen. Auch Copy/Paste klappt. Die Tastatur ist immer auf dem Bildschirm aktiv, wo die Maus gerade ist. Für den PC ist die Oberfläche optisch schön realisiert. Bei der Mac Variante sollte man sich z.B. SynergyKM googlen.... Dieses kleine Tool trägt Synergy in die Systemeinstellungen ein und macht die Konfiguration deutlich leichter.

Tipp: Wer den Mac als Server nutzt, sollte darauf achten, dass unter den Systemeinstellungen -> Bedienungshilfen die Option "Zugriff für Hilfsgeräte aktivieren" angehakt ist. Ansonsten könnte es sein, dass die Tastatur nur auf der Mac Seite eingaben empfängt und nicht weiterreicht zum Client.

Synergy gibt es für Mac, PC, Linux....

...

PS:
Eine einfache Alternative ist übrigens ShareMouse. Kostenlos für max 2 verbundene Systeme

Freitag, 8. Juli 2011

Beuth Presse veröffentlicht Artikel von mir

In der aktuellen Beuth Presse (Ausgabe 3/2011) wurde ein Artikel veröffentlicht, den ich im Auftrag der Professorin Dr. Merceon geschrieben habe. Es geht um ein internationales Bildungsprojekt in dem neue Master Studiengänge angeboten werden sollen. Weitere Informationen direkt im Artikel:

Titel: Wissenschaft kennt keine Grenzen

Link: http://www.beuth-hochschule.de/uploads/media/Beuth_Presse_3-11_Web.pdf (Seite 30)

Dienstag, 5. Juli 2011

Schlechte Werbung muss bestraft werden...

Die aktuelle iPhone 4 Werbung ist so beschränkt, dass ich mir gedacht habe... nimm sie doch mal ein wenig auf die Schippe... deshalb dieser Kurze Clip ;-)

Montag, 4. Juli 2011

Wie orte ich das Handy (Samsung Galaxy S2) meines Partners ;-)

Tja ja wie fange ich...

der Titel sollte erstmal eher mit einem Augenzwinkern gesehen werden, denn eigentlich zeige ich hier eher wie man sein verlorenes Samsung Galaxy S2 wiederfinden kann.

Zur Theorie:

Das Samsung Galaxy S2 besitzt eine Funktion, die es ermöglicht sich das Handy auf einer Karte im Internet anzeigen zu lassen bzw. es über einen bestimmten Zeitraum zu verfolgen. Wenn man aber ein eifersüchtige/r Ehemann/Ehefrau ist kann man diese Funktion jedoch dazu missbrauchen um herauszufinden wo die geliebte Person sich gerade befindet. Vielleicht ist er/sie ja garnicht auf Arbeit oder auf Geschäftsreise ;-) .....

wie auch immer, was wird benötigt:

- Samsung Galaxy S2
- Einen Samsung Dive Account
- Einen PC mit Internet :-)


Und so gehts:

- am Samsung Galaxy S2 die Optionstaste drücken (die linke) und in die "Einstellungen" gehen
- ins Menü "Standort und Sicherheit" wechseln
- runter Scrollen zu den Menüpunkten "Eigenes Telefon suchen" und die "Fernzugriffunktionen" aktivieren
- normalerweise müsste jetzt die Frage kommen ob ein neuer Samsung Account angelegt werden soll. Den Prozess durchführen bis der Account erstellt wurde.

und das war es auch schon fast...

Nun einfach auf http://www.samsungdive.com surfen... dort sich mit den eben erstellten Account anmelden und auf "find my Mobile" klicken (man kann oben rechts auch auf deutsch umstellen)...

Das Handy aktiviert anschließend sein GPS Empfänger und sendet seine Position zum SamsungDive Portal direkt auf die Karte. Wer möchte kann auch das Gerät verfolgen lassen über eine bestimmte Zeitspanne einfach den "Start tracking" Knopf drücken.

Der "Call Logs" Knopf verrät einem sogar mit wem der Handy Besitzer als letztes telefoniert hat.

Viel Spaß beim Orten eurer Kinder, Ehepartner oder Haustiere ;-)

Montag, 4. April 2011

Uni Projekt - Mal Block 3D

Im Fach Computergraphics and Effects hatte jeder die Aufgabe sich ein Spiel Konzept auszudenken und umzusetzen. Dabei sollten Gruppen von je zwei Personen gebildet werden. Zusammen mit Stephanie Schmidt entstand das Projekt MalBlock 3D...

Was ist MalBlock 3D?:

Der Titel trägt den Namen Mal Block, weil die Hauptfigur im Spiel Toonstruck von Virgin Interactive so hieß. Im Comic Adventure Abenteuer aus den 90er Jahren ging es um eine Maschine (der Übelator), die die Welt nach Laserbeschuss in eine düstere-, böse Welt verwandelt. Der Held hatte die Aufgabe verschiedene Gegenstände zu sammeln um eine Gegenwaffe (den Niedlifizierer) zu bauen, mit der die Welt wieder niedlich und hübsch gemacht werden kann. Die Waffen selbst wurden auf UFOs installiert.

In MalBlock 3D greifen wir die Idee auf und erstellen eine Welt die zwar immer noch den Comic Look des Adventures besitzt, aber komplett in 3D spielbar ist. In einem Areal erhalten zwei Spieler jeweils ein UFO (ein Niedlifizierer und ein Übelator) und fliegen damit durch die Spielwelt. In der Welt selbst befinden sich verschiedene Gegenständer, Tiere, Pflanzen, Gebäude, die von den Spielern angeschossen werden können. Je nach Waffentyp wird das getroffene Objekt dann entweder niedlich oder hässlich/böse aussehend und der jeweilige Spieler erhält einen Punkt.

Wie wird gespielt?


Jeder Spieler kann das Spiel auf seinem eigenen PC starten. Das Spiel verbindet sich dann mit einen Server und verbindet beide Spieler miteinander. Die Steuerung erfolgt mit einer Nintendo Wii Fernbedienung, die in der linken Hand gehalten wird und je nach Neigung bewegt sich das UFO in die jeweilige Richtung. Zusätzlich hat der Spieler noch das Nunchuk in der anderen Hand und kann mit dem Analogstick ein Fadenkreuz steuern und mit einen Feuerknopf am Nunchuk schießen.

Welche Techniken stecken dahinter?

Das Spiel basiert auf einer Engine mit dem Namen jVR. Diese ist eine Masterarbeit eines ehemaligen Studenten der Beuth Hochschule. Programmiert wird in Java, die 3D Umgebung ist OpenGl und für die Bedienung mit den Wii Controllern wurde das Framework wiiusej genutzt. Außerdem wurden verschiedene Shader erstellt wie z.B.: Bloom, BumpMapping, Depth of Field, Schatten, Wasser....
Ein eigenes Partikelsystem generierte Regen, Laserschüsse und Verwandlungseffekte.
Die 3D Modelle wurden in 3Ds Max modelliert und texturiert. Via Collada importer werden die Models dann in die Welt geladen. Die Server und Clients basieren auf Socket Connections und wurden selbst geschrieben.

Video:

 

Freitag, 11. März 2011

Das App Fotobuch erblickt das Licht der Welt

In einem Gemeinschaftsprojekt wurde ein Auftrag für eine Fotobuch App angenommen. Programmierer/Entwickler waren hier Florian Steinhoff und ich.

Was macht die App?
Jeder der ein iPhone oder iPod Touch mit einer Kamera hat kann mit dieser App ein Fotobuch erstellen, die Bilder virtuell anordnen mit Überschriften versehen und am ende zum Druck an eine Druckerei versenden.

Weiter Infos unter: http://www1.photo-druck.de/iphone-fotobuch/

Freitag, 4. März 2011

Neues Video Tutorial für 3DS Max

In diesem Tutorial zeige ich wie man mit dem Modifikator 3D Verschiebung und einer Höhentextur ein Terrain erstellt auf dem auf zwei verschiedenen Höhen-Texturen ineinander übergehen. Außerdem stelle ich kurz das Plug-In Grass-o-Matic vor, mit dem man leicht Gras erzeugen und animieren kann. Zum Schluss wird noch kurz gezeigt wie man ein Video aus 3Ds Max rendert, welches eine bessere Qualität hat als auf dem Standard Wege.

So sieht es fertig aus


Tutorial Teil 1

Tutorial Teil 2

Mittwoch, 2. März 2011

Neue App im App Store

Wiedereinmal hat eine App das Licht der Welt entdeckt....

Diesmal wurde für das Fashion und Lifestyle Magazin Teaser Mag (www.teaser-mag.de) eine App entwickelt...  Zusammen mit Miggi Zwicklbauer habe ich das Projekt angenommen und zum Abschluss gebracht. Miggi war war für das Design und GUI Layout zuständig. Ich selbst für die Umsetzung in der Programmierung etc. 

Das App ist im Prinzip ein Book Store für eigene Magazine aus dem Hause Teaser Mag. Im App kann man sich also ein Magazin aussuchen, kaufen und/oder kostenlos herunterladen. Außerdem werden die Magazine direkt in der App angezeigt. Es ist optimiert für das iPad und das iPhone. Video Inhalte erweitern das Magazin zu einer multimedialen Erfahrung...

Das App wurde nativ für das iPhone/iPad entwickelt und ist unter folgenden Link im AppStore herunterladbar: http://itunes.apple.com/de/app/teaser-mag/id408389603?mt=8

Screenshots: