Deprecated: Assigning the return value of new by reference is deprecated in /var/www/sdb/8/f/dev.art/wordpress/wp-settings.php on line 472

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/sdb/8/f/dev.art/wordpress/wp-settings.php on line 487

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/sdb/8/f/dev.art/wordpress/wp-settings.php on line 494

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/sdb/8/f/dev.art/wordpress/wp-settings.php on line 530

Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/classes.php on line 611

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/classes.php on line 728

Strict Standards: Redefining already defined constructor for class wpdb in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/wp-db.php on line 306

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/cache.php on line 103

Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/cache.php on line 425

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/query.php on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/theme.php on line 623

Strict Standards: Redefining already defined constructor for class WP_Dependencies in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/class.wp-dependencies.php on line 15

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method Wordics::myWordics_init() should not be called statically in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/plugin.php on line 311
Développement et arts numériques » Web
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/kses.php on line 947

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/sdb/8/f/dev.art/wordpress/wp-includes/kses.php on line 948

Archive

Posts Tagged ‘Web’

L’application de la gravité

septembre 6th, 2008

Appliquer les lois de la logique a été une des premières innovations lié à l’informatique. Des langages comme le prolog ont ainsi été inventé afin de maitriser la logique des assertions comme :

Aristote est un homme.
Tous les hommes sont mortels.
Résultat fourni par l’ordinateur : Aristote est mortel.

La physique n’est pas en reste et les gamers jouent depuis nombre d’années dans des environnements virtuels 3D dans lesquels la pesanteurs et la gestions des collisions est au rendez vous.

Une application en flash

Etant donné la facilité d’implémentation des intéraction utilisateurs, ainsi que la génération graphique, j’ai intégré cette lois simple x(t)=1/2*gt² dans un environnement flash :

Get Adobe Flash player

Le code est simple et ne réprésente qu’une centaine de lignes.

Quelques explications

Le déplacement est gérer par des vecteurs vitesse vx et vy. La fonction de base utilisé pour le déplacement est :

	function calcPosition() {
		position_x = -v0_x*t*Math.sin(angle)+pos0_x;
		position_y = -1/2*g*t*t-v0_y*t*Math.sin(angle)+pos0_y;
	}

La vitesse est réorienté à chaque collision suivant la fonction suivante :

	function rebond() {
		t = 0;
		var pos0:Array;
		pos0_x = this._x;
		pos0_y = this._y;
		var v0x = (positionAnt_x-position_x)/tick;
		var v0y = (positionAnt_y-position_y)/tick;
		v0_x = Math.abs(v0x);
		v0_y = Math.abs(v0y);
		calculateAngle(v0x*inv_x, v0y*inv_y);
		collision = 'sans';
	}

Qui en fait se résume à une mise à jour de la valeur d’angle et des vecteurs v0x et v0y.

Le déplacement est mise à jour a chaque image suivant les principes énooncés précédemment (mouvement paramétré et détection de collision). Comme l’exemple le montre le mouvement est fluide et correspond assez bien à une balle rebondissante.

Pour aller plus loin

Un exemple plus abouti a été réalisé par generalrelativity.org.

Une étude complète sur la détection de collision : Détection de collision sur flashxpress

Utilisation de fonction sur un évènement

août 28th, 2008

Evènement dans le code HTML

Sur un évènement du dom, une méthode simple est de référencer directement dans le code html, l’attribut onevent à la balise que l’on veut rendre dynamique.

Exemple :

<input type="text" value="entrer" />

Cette méthode très avantageuse permet :

  • de passer des paramètres à la fonction destinataire
  • de garder la balise émettrice de l’appel

Ce qui n’est pas possible avec les fonctions dynamiques.

Evènements gérés de manière dynamique

Deux standards

Le premier standard est celui du dom, il est reconnu par firefox et opéra, et s’écrit sur la forme :

element.addEventListener(event, handler, typePropagation);

Le deuxième est celui d’IE :

element.attachEvent(event, handler)

A noter que event s’écrit avec IE en incluant le ‘on’ et sans dans le dom w3c (ie:onclick, dom:click).

Un explication détaillée peut être trouvée ici

Problématique

Dans une utilisation basique, nous perdons :

  • la capacité d’envoyé à la fonction d’autre variable que l’élément source.
  • l’élément sur lequel est inscrit la fonction (sous IE il est impossible de retrouver de manière simple cet élément)

Cherchant une utilisation cross-Browser nous nous retrouvons avec très peu d’information une fois l’évènement enclenché.

Solution

Il peut s’averer utile de transmettre des variables, il est tout aussi utile de connaitre l’origine de l’évènement qui est souvent plus intéressant que la balise qui l’a déclenché*.

l’utilisation de la fontion eval s’avère une solution :

function addEvent(element, action, fct, bool){
	if (element.addEventListener) {
		element.addEventListener(action, function(){eval(fct)}, bool);
	} else if (element.attachEvent) {
		element.attachEvent("on"+action, function(){eval(fct)});
	}
}
addEvent(
    document.getElementById('test'),
    'click',
    'alert(\''+document.getElementById('test').getAttribute('id')+'\');alert(new Date())',
    false
)

Balise Test

Voilà, avec cette méthode vous pouvez transmettre tout paramètre à vos évènements.

A noter que cela est aussi utilisable pour les handlers présent dans settimeout ou dans setintervalle.

*En effet, sous ces deux navigateurs, un évènement intégré dans une balise de niveau n serait reconnu par les balise de niveau n+m, et c’est la balise finale qui enverrais son identification et non la balise portant l’évènement. Avec IE, il n’existe pas de variable simple afin de récupérer cette balise, avec le dom, event.currentTarget permet de la connaitre.