Avec ce temps rien de tel que de s’allonger dans l’herbe…
Salut tout le monde, bon ok pour l’instant je suis seul sur ce blog mais bon avec un peu de bol ça va peut-être changer !! :D
Pour commencer en douceur un tout petit post concernant 2 classes pour générer de l’herbe en Actionscript, la première pour le brin d’herbe et la seconde pour la pelouse…
Là , j’utilise les tweens d’adobe pour faire simple et que tout le monde puisse utiliser le code dès le début ; donc ce n’est pas vraiment super optimisé.
Voici le code de la classe Grace :
-
package com.inkProd.display.lawn {
-
import com.inkProd.transitions.Tween;
-
import fl.transitions.easing.Regular;
-
import fl.transitions.TweenEvent;
-
import flash.display.GradientType;
-
import flash.display.Sprite;
-
import flash.geom.Matrix;
-
/**
-
* …
-
* @author la pieuvre (Guillaume Le Souchu)
-
*/
-
public class Grace extends Sprite{
-
-
protected var _sizeMin:Number;
-
protected var _sizeMax:Number;
-
protected var _rotation:Number = 20+Math.random() * 10
-
-
protected var _tw:Tween;
-
protected var _twTps:Number = .8;
-
protected var _twFunc:Function = Regular.easeInOut;
-
protected var _twBegin:Number = _rotation;
-
protected var _twEnd:Number = _rotation + Math.random()*10;
-
-
public function Grace(pSizeMin:Number, pSizeMax:Number) {
-
_sizeMin = pSizeMin;
-
_sizeMax = pSizeMax;
-
_draw();
-
this.rotation = _rotation
-
_initTw();
-
//this.cacheAsBitmap = true;
-
}
-
-
public function vent(value:Boolean = true):void {
-
if (value) {
-
_tw.continueTo(_twEnd, _twTps+Math.random()*.4);
-
}else {
-
_tw.stop();
-
}
-
}
-
protected function _draw():void {
-
var r1:Number = Math.random() * (_sizeMax – _sizeMin)
-
var r2x = Math.random()*4
-
var r2y = Math.random()*10
-
var m:Matrix = new Matrix()
-
m.createGradientBox( 12, _sizeMin+r1, -Math.PI/2, 0, -_sizeMin)
-
graphics.beginGradientFill(GradientType.LINEAR, [0x0a4f01, 0x35771d], [1, 1], [100, 255], m);
-
graphics.curveTo(-8+r2x, -(14-r2y), Math.random()*12, -(_sizeMin+r1));
-
graphics.curveTo(-3+r2x, -(18-r2y), 4, 0);
-
graphics.endFill();
-
}
-
protected function _initTw():void {
-
_tw = new Tween(this, "rotation", _twFunc, _twBegin, _twEnd, _twTps, true);
-
_tw.stop();
-
_tw.addEventListener(TweenEvent.MOTION_FINISH, _continue);
-
}
-
protected function _continue(e:TweenEvent):void {
-
if (rotation == _rotation) {
-
_tw.continueTo(_twEnd, _twTps+Math.random()*.4);
-
}else {
-
_tw.continueTo(_twBegin, _twTps+Math.random()*.4);
-
}
-
}
-
}
-
}
Le code de la classe Lawn :
-
package com.inkProd.display.lawn {
-
import flash.display.Sprite;
-
/**
-
* …
-
* @author la pieuvre (Guillaume Le Souchu)
-
*/
-
public class Lawn extends Sprite{
-
-
protected var _width:Number;
-
protected var _sizeMin:Number
-
protected var _sizeMax:Number
-
protected var _dencity:Number;
-
-
public function Lawn(pWidth:Number, pSizeMin:Number, pSizeMax:Number, pDencity:Number = 1/2) {
-
_width = pWidth;
-
_sizeMin = pSizeMin;
-
_sizeMax = pSizeMax;
-
_dencity = pDencity;
-
_add();
-
}
-
protected function _add():void {
-
var g:Grace
-
var finBoucle:Number = _width * _dencity;
-
for (var i:int = 0; i < finBoucle; i++) {
-
g = new Grace(_sizeMin, _sizeMax);
-
g.x = Math.random () * _width;
-
addChild(g);
-
if (i%0 != 0) {
-
g.vent();
-
}
-
}
-
}
-
}
-
}
Pour finir le code de la classe Main :
-
package classes {
-
import com.inkProd.display.lawn.Lawn;
-
import flash.display.Sprite;
-
/**
-
* …
-
* @author la pieuvre (Guillaume Le Souchu) / lesouchu@gmail.com
-
*/
-
[SWF (width = "900", height = "300", frameRate = "50", backgroundColor = "0xA5A5A5", pageTitle = "Guillaume Le Souchu Développeur ActionScript 3")]
-
public class Main extends Sprite{
-
-
protected var _lawn:Lawn
-
-
public function Main() {
-
_initLawn();
-
}
-
-
protected function _initLawn():void {
-
_lawn = new Lawn(stage.stageWidth+30, 30, 100);
-
_lawn.x = (stage.stageWidth – _lawn.width) * .5;
-
_lawn.y = stage.stageHeight;
-
_lawn.filters = [new DropShadowFilter(6, 45, 0, .7,5, 5, .7, BitmapFilterQuality.HIGH)]
-
addChild(_lawn);
-
}
-
}
-
}
Sources herbes (zip / flash cs5)
There are 2 Comments to "Avec ce temps rien de tel que de s’allonger dans l’herbe…"
Hello !
Il n’y a pas très longtemps, j’ai eu besoin de créer le même genre d’animation. Je m’y suis pris a peu comme toi, sauf que j’utilise une seul Shape pour tout mes brin d’herbes, ce qui allège énormément le calcul de rendu.
Essaye de faire la même chose en utilisant des objet non graphique pour représenter les brins d’herbes, et un seul objet graphique pour représenter le tout.
Pour la vitesse d’oscillation des brins, plutot que d’utiliser tweener (qui me parait lourd a utiliser, mais c’est une question de point de vue) tu pourrais te contenter de la variation d’un cosinus en utilisant avec des limites d’oscillations et une vitesse différente pour chaque brin)
Sinon, je suis content de voir ton blog, je vais aller voir tes articles sur les courbes de bézier
A+
Hello, hello !!
Effectivement c’est une bonne idée… Mais je t’avoue que je n’ai pas chercher à faire quelque chose de spécialement optimisé (my bad). c’était plus dans l’idée d’une classe basique, où l’on peut avoir un brin d’herbe tout seul (bien que tout seul il ne serve pas à grand chose :)) ou une pelouse complète…
La prochaine version sera optimisée ;)