Der Spam-Thread


Seite: 1 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480 490 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800 810 820 830 840 850 860 870 880 890 900 910 920 930 940 950 960 970 980 990 1000 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100 1110 1120 1130 1140 1150 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1170 1180 1190 1200 1210 1220 1230 1240 1250 1260 1270 1280 1290 1300 1310 1320 1330 1340 1350 1360 1370 1380 1390 1392
Autor Beitrag
Achtzig
08.10.10 - 20:52:50 Uhr

Kein Problem. Habe gerade die Seite zerlegt und es fand kein Aufruf dabei statt

... die Tastenrate könnte noch irgendwie angepasst werden. Gar nicht so einfach, zu zielen.
Valaron
08.10.10 - 20:53:54 Uhr

Danke Achtzig

----
Mein Blog
Achtzig
08.10.10 - 20:59:22 Uhr

Vielleicht sollten die einzelnen Elemente unterschiedliche Punkte haben. Je kleiner das getroffene Element ist um so mehr Punkte könnte es geben.
SammysHP
08.10.10 - 21:12:10 Uhr

Zitat von Valaron:
Hier ist das script: [...]
Das ist nicht das Script, das bindet nur das Script von github ein.

_________________
www.sammyshp.de
Valaron
08.10.10 - 21:16:00 Uhr

Ok SammysHP hier sind die Javascript Dateien
1.Datei asteroids.js
  1. (function() {  
  2. function Asteroids() {  
  3.     if ( ! window.ASTEROIDS )  
  4.         window.ASTEROIDS = {  
  5.             enemiesKilled: 0  
  6.         };  
  7.       
  8.     /*  
  9.         Classes  
  10.     */  
  11.       
  12.     function Vector(x, y) {  
  13.         if ( typeof x == 'Object' ) {  
  14.             this.x = x.x;  
  15.             this.y = x.y;  
  16.         } else {  
  17.             this.x = x;  
  18.             this.y = y;  
  19.         }  
  20.     };  
  21.       
  22.     Vector.prototype = {  
  23.         cp: function() {  
  24.             return new Vector(this.x, this.y);  
  25.         },  
  26.           
  27.         mul: function(factor) {  
  28.             this.x *= factor;  
  29.             this.y *= factor;  
  30.             return this;  
  31.         },  
  32.           
  33.         mulNew: function(factor) {  
  34.             return new Vector(this.x * factor, this.y * factor);  
  35.         },  
  36.           
  37.         add: function(vec) {  
  38.             this.x += vec.x;  
  39.             this.y += vec.y;  
  40.             return this;  
  41.         },  
  42.           
  43.         addNew: function(vec) {  
  44.             return new Vector(this.x + vec.x, this.y + vec.y);  
  45.         },  
  46.           
  47.         sub: function(vec) {  
  48.             this.x -= vec.x;  
  49.             this.y -= vec.y;  
  50.             return this;  
  51.         },  
  52.           
  53.         subNew: function(vec) {  
  54.             return new Vector(this.x - vec.x, this.y - vec.y);  
  55.         },  
  56.           
  57.         // angle in radians  
  58.         rotate: function(angle) {  
  59.             var x = this.x, y = this.y;  
  60.             this.x = x * Math.cos(angle) - Math.sin(angle) * y;  
  61.             this.y = x * Math.sin(angle) + Math.cos(angle) * y;  
  62.             return this;  
  63.         },  
  64.           
  65.         // angle still in radians  
  66.         rotateNew: function(angle) {  
  67.             return this.cp().rotate(angle);  
  68.         },  
  69.           
  70.         // angle in radians... again  
  71.         setAngle: function(angle) {  
  72.             var l = this.len();  
  73.             this.x = Math.cos(angle) * l;  
  74.             this.y = Math.sin(angle) * l;  
  75.             return this;  
  76.         },  
  77.           
  78.         // RADIANS  
  79.         setAngleNew: function(angle) {  
  80.             return this.cp().setAngle(angle);  
  81.         },  
  82.           
  83.         setLength: function(length) {  
  84.             var l = this.len();  
  85.             if ( l ) this.mul(length / l);  
  86.             else this.x = this.y = length;  
  87.             return this;  
  88.         },  
  89.           
  90.         setLengthNew: function(length) {  
  91.             return this.cp().setLength(length);  
  92.         },  
  93.           
  94.         normalize: function() {  
  95.             var l = this.len();  
  96.             this.x /= l;  
  97.             this.y /= l;  
  98.             return this;  
  99.         },  
  100.           
  101.         normalizeNew: function() {  
  102.             return this.cp().normalize();  
  103.         },  
  104.           
  105.         angle: function() {  
  106.             return Math.atan2(this.y, this.x);  
  107.         },  
  108.           
  109.         collidesWith: function(rect) {  
  110.             return this.x > rect.x && this.y > rect.y && this.x < rect.x + rect.width && this.y < rect.y + rect.height;  
  111.         },  
  112.           
  113.         len: function() {  
  114.             var l = Math.sqrt(this.x * this.x + this.y * this.y);  
  115.             if ( l < 0.005 && l > -0.005) return 0;  
  116.             return l;  
  117.         },  
  118.           
  119.         is: function(test) {  
  120.           
  121.             return typeof test == 'object' && this.x == test.x && this.y == test.y;  
  122.         },  
  123.           
  124.         toString: function() {  
  125.             return '[Vector(' + this.x + ', ' + this.y + ') angle: ' + this.angle() + ', length: ' + this.len() + ']';  
  126.         }  
  127.     };  
  128.       
  129.     function Line(p1, p2) {  
  130.         this.p1 = p1;  
  131.         this.p2 = p2;  
  132.     };  
  133.       
  134.     Line.prototype = {  
  135.         shift: function(pos) {  
  136.             this.p1.add(pos);  
  137.             this.p2.add(pos);  
  138.         },  
  139.           
  140.         intersectsWithRect: function(rect) {  
  141.             var LL = new Vector(rect.x, rect.y + rect.height);  
  142.             var UL = new Vector(rect.x, rect.y);  
  143.             var LR = new Vector(rect.x + rect.width, rect.y + rect.height);  
  144.             var UR = new Vector(rect.x + rect.width, rect.y);  
  145.               
  146.             if (  
  147.                 this.p1.x > LL.x && this.p1.x < UR.x && this.p1.y < LL.y && this.p1.y > UR.y &&  
  148.                 this.p2.x > LL.x && this.p2.x < UR.x && this.p2.y < LL.y && this.p2.y > UR.y  
  149.             ) return true;  
  150.  
  151.             if ( this.intersectsLine(new Line(UL, LL)) ) return true;  
  152.             if ( this.intersectsLine(new Line(LL, LR)) ) return true;  
  153.             if ( this.intersectsLine(new Line(UL, UR)) ) return true;  
  154.             if ( this.intersectsLine(new Line(UR, LR)) ) return true;  
  155.             return false;  
  156.         },  
  157.           
  158.         intersectsLine: function(line2) {  
  159.             var v1 = this.p1, v2 = this.p2;  
  160.             var v3 = line2.p1, v4 = line2.p2;  
  161.               
  162.             var denom = ((v4.y - v3.y) * (v2.x - v1.x)) - ((v4.x - v3.x) * (v2.y - v1.y));  
  163.             var numerator = ((v4.x - v3.x) * (v1.y - v3.y)) - ((v4.y - v3.y) * (v1.x - v3.x));  
  164.           
  165.             var numerator2 = ((v2.x - v1.x) * (v1.y - v3.y)) - ((v2.y - v1.y) * (v1.x - v3.x));  
  166.               
  167.             if ( denom == 0.0 ) {  
  168.                 return false;  
  169.             }  
  170.             var ua = numerator / denom;  
  171.             var ub = numerator2 / denom;  
  172.               
  173.             return (ua >= 0.0 && ua <= 1.0 && ub >= 0.0 && ub <= 1.0);  
  174.         }  
  175.     };  
  176.       
  177.     /*function Highscores() {  
  178.         var w = (document.clientWidth || window.innerWidth);  
  179.         var h = (document.clientHeight || window.innerHeight);  
  180.           
  181.         this.container = document.createElement('div');  
  182.         this.container.className = "ASTEROIDSYEAH";  
  183.         with ( this.container.style ) {  
  184.             position = "fixed";  
  185.             top = (h / 2 - 250) + "px";  
  186.             left = (w / 2 - 250) + "px";  
  187.             width = "500px";  
  188.             height = "500px";  
  189.             MozBoxShadow = WebkitBoxShadow = "0 0 25px #000";  
  190.             zIndex = "10002";  
  191.         };  
  192.         document.body.appendChild(this.container);  
  193.           
  194.         // Create iframe  
  195.         this.iframe = document.createElement('iframe');  
  196.         this.iframe.className = "ASTEROIDSYEAH";  
  197.         this.iframe.width = this.iframe.height = 500;  
  198.         this.iframe.src = highscoreURL;  
  199.         this.iframe.frameBorder = 0;  
  200.         this.container.appendChild(this.iframe);  
  201.           
  202.         // Create close button  
  203.         this.close = document.createElement('a');  
  204.         this.close.href = "#";  
  205.         this.close.onclick = function() {  
  206.             that.highscores.hide();  
  207.         };  
  208.         this.close.innerHTML = "X";  
  209.         with ( this.close.style ) {  
  210.             position = "absolute";  
  211.             display = "block";  
  212.             width = "24px";  
  213.             height = "24px";  
  214.             top = "-12px";  
  215.             right = "-12px";  
  216.             background = "url(" + closeURL + ")";  
  217.             textIndent = "-10000px";  
  218.             outline = "none";  
  219.             textDecoration = "none";  
  220.             fontFamily = "Arial";  
  221.             zIndex = "10003";  
  222.         }  
  223.         this.container.appendChild(this.close);  
  224.     };  
  225.       
  226.     Highscores.prototype = {  
  227.         show: function() {  
  228.             this.container.style.display = "block";  
  229.             this.sendScore();  
  230.         },  
  231.           
  232.         hide: function() {  
  233.             this.container.style.display = "none";  
  234.         },  
  235.           
  236.         sendScore: function() {  
  237.             this.iframe.src = highscoreURL + "#" + (that.enemiesKilled * 10) + ":" + escape(document.location.href);  
  238.         }  
  239.     };*/  
  240.       
  241.     /*  
  242.         end classes, begin code  
  243.     */  
  244.       
  245.     var that = this;  
  246.       
  247.     var isIE = !!window.ActiveXObject; // IE gets less performance-intensive  
  248.       
  249.     // configuration directives are placed in local variables  
  250.     var w = document.documentElement.clientWidth, h = document.documentElement.clientHeight;  
  251.     var playerWidth = 20, playerHeight = 30;  
  252.       
  253.     var playerVerts = [[-1 * playerHeight/2, -1 * playerWidth/2], [-1 * playerHeight/2, playerWidth/2], [playerHeight/2, 0]];  
  254.       
  255.     var ignoredTypes = ['HTML', 'HEAD', 'BODY', 'SCRIPT', 'TITLE', 'META', 'STYLE', 'LINK', 'SHAPE', 'LINE', 'GROUP', 'IMAGE', 'STROKE', 'FILL', 'SKEW', 'PATH', 'TEXTPATH']; // Half of these are for IE g_vml  
  256.     var hiddenTypes = ['BR', 'HR'];  
  257.       
  258.     var FPS = 50;  
  259.       
  260.     // units/second  
  261.     var acc              = 300;  
  262.     var maxSpeed      = 600;  
  263.     var rotSpeed      = 360; // one rotation per second  
  264.     var bulletSpeed      = 700;  
  265.     var particleSpeed = 400;  
  266.       
  267.     var timeBetweenFire = 150; // how many milliseconds between shots  
  268.     var timeBetweenBlink = 250; // milliseconds between enemy blink  
  269.     var timeBetweenEnemyUpdate = isIE ? 10000 : 2000;  
  270.     var bulletRadius = 2;  
  271.     var maxParticles = isIE ? 20 : 40;  
  272.     var maxBullets = isIE ? 10 : 20;  
  273.       
  274.     /*var highscoreURL = "http://asteroids.glonk.se/highscores.html";  
  275.     var closeURL = "http://asteroids.glonk.se/close.png";*/  
  276.       
  277.     // generated every 10 ms  
  278.     this.flame = {r: [], y: []};  
  279.       
  280.     // blink style  
  281.     this.toggleBlinkStyle = function () {  
  282.         if (this.updated.blink.isActive) {  
  283.             removeClass(document.body, 'ASTEROIDSBLINK');  
  284.         } else {  
  285.             addClass(document.body, 'ASTEROIDSBLINK');  
  286.         }  
  287.  
  288.         this.updated.blink.isActive = !this.updated.blink.isActive;  
  289.     };  
  290.  
  291.     addStylesheet(".ASTEROIDSBLINK .ASTEROIDSYEAHENEMY", "outline: 2px dotted red;");  
  292.       
  293.     this.pos = new Vector(100, 100);  
  294.     this.lastPos = false;  
  295.     this.vel = new Vector(0, 0);  
  296.     this.dir = new Vector(0, 1);  
  297.     this.keysPressed = {};  
  298.     this.firedAt = false;  
  299.     this.updated = {  
  300.         enemies: false, // if the enemy index has been updated since the user pressed B for Blink  
  301.         flame: new Date().getTime(), // the time the flame was last updated  
  302.         blink: {time: 0, isActive: false}  
  303.     };  
  304.     this.scrollPos = new Vector(0, 0);  
  305.       
  306.     this.bullets = [];  
  307.       
  308.     // Enemies lay first in this.enemies, when they are shot they are moved to this.dying  
  309.     this.enemies = [];  
  310.     this.dying = [];  
  311.     this.totalEnemies = 0;  
  312.       
  313.     // Particles are created when something is shot  
  314.     this.particles = [];  
  315.       
  316.     // things to shoot is everything textual and an element of type not specified in types AND not a navigation element (see further down)  
  317.     function updateEnemyIndex() {  
  318.         for ( var i = 0, enemy; enemy = that.enemies[i]; i++ )  
  319.             removeClass(enemy, "ASTEROIDSYEAHENEMY");  
  320.               
  321.         var all = document.body.getElementsByTagName('*');  
  322.         that.enemies = [];  
  323.         for ( var i = 0, el; el = all[i]; i++ ) {  
  324.             // elements with className ASTEROIDSYEAH are part of the "game"  
  325.             if ( indexOf(ignoredTypes, el.tagName.toUpperCase()) == -1 && el.prefix != 'g_vml_' && hasOnlyTextualChildren(el) && el.className != "ASTEROIDSYEAH" && el.offsetHeight > 0 ) {  
  326.                 el.aSize = size(el);  
  327.                 that.enemies.push(el);  
  328.                   
  329.                 addClass(el, "ASTEROIDSYEAHENEMY");  
  330.                   
  331.                 // this is only for enemycounting  
  332.                 if ( ! el.aAdded ) {  
  333.                     el.aAdded = true;  
  334.                     that.totalEnemies++;  
  335.                 }  
  336.             }  
  337.         }  
  338.     };  
  339.     updateEnemyIndex();  
  340.       
  341.     // createFlames create the vectors for the flames of the ship  
  342.     var createFlames;  
  343.     (function () {  
  344.         var rWidth = playerWidth,  
  345.             rIncrease = playerWidth * 0.1,  
  346.             yWidth = playerWidth * 0.6,  
  347.             yIncrease = yWidth * 0.2,  
  348.             halfR = rWidth / 2,  
  349.             halfY = yWidth / 2,  
  350.             halfPlayerHeight = playerHeight / 2;  
  351.  
  352.         createFlames = function () {  
  353.             // Firstly create red flames  
  354.             that.flame.r = [[-1 * halfPlayerHeight, -1 * halfR]];  
  355.             that.flame.y = [[-1 * halfPlayerHeight, -1 * halfY]];  
  356.  
  357.             for ( var x = 0; x < rWidth; x += rIncrease ) {  
  358.                 that.flame.r.push([-random(2, 7) - halfPlayerHeight, x - halfR]);  
  359.             }  
  360.  
  361.             that.flame.r.push([-1 * halfPlayerHeight, halfR]);  
  362.               
  363.             // ... And now the yellow flames  
  364.             for ( var x = 0; x < yWidth; x += yIncrease ) {  
  365.                 that.flame.y.push([-random(2, 7) - halfPlayerHeight, x - halfY]);  
  366.             }  
  367.  
  368.             that.flame.y.push([-1 * halfPlayerHeight, halfY]);  
  369.         };  
  370.     })();  
  371.       
  372.     createFlames();  
  373.       
  374.     /*  
  375.         Math operations  
  376.     */  
  377.       
  378.     function radians(deg) {  
  379.         return deg * 0.0174532925;  
  380.     };  
  381.       
  382.     function degrees(rad) {  
  383.         return rad * 57.2957795;  
  384.     };  
  385.       
  386.     function random(from, to) {  
  387.         return Math.floor(Math.random() * (to + 1) + from);  
  388.     };  
  389.       
  390.     /*  
  391.         Misc operations  
  392.     */  
  393.       
  394.     function code(name) {  
  395.         var table = {'up': 38, 'down': 40, 'left': 37, 'right': 39, 'esc': 27};  
  396.         if ( table[name] ) return table[name];  
  397.         return name.charCodeAt(0);  
  398.     };  
  399.       
  400.     function boundsCheck(vec) {  
  401.         if ( vec.x > w )  
  402.             vec.x = 0;  
  403.         else if ( vec.x < 0 )  
  404.             vec.x = w;  
  405.           
  406.         if ( vec.y > h )  
  407.             vec.y = 0;  
  408.         else if ( vec.y < 0 )  
  409.             vec.y = h;      
  410.     };  
  411.       
  412.     function size(element) {  
  413.         var el = element, left = 0, top = 0;  
  414.         do {  
  415.             left += el.offsetLeft || 0;  
  416.             top += el.offsetTop || 0;  
  417.             el = el.offsetParent;  
  418.         } while (el);  
  419.         return {x: left, y: top, width: element.offsetWidth || 10, height: element.offsetHeight || 10};  
  420.     };  
  421.       
  422.     // Taken from:  
  423.     // http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html  
  424.     function addEvent( obj, type, fn ) {  
  425.         if (obj.addEventListener)  
  426.             obj.addEventListener( type, fn, false );  
  427.         else if (obj.attachEvent) {  
  428.             obj["e"+type+fn] = fn;  
  429.             obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }  
  430.             obj.attachEvent( "on"+type, obj[type+fn] );  
  431.         }  
  432.     }  
  433.  
  434.     function removeEvent( obj, type, fn ) {  
  435.         if (obj.removeEventListener)  
  436.             obj.removeEventListener( type, fn, false );  
  437.         else if (obj.detachEvent) {  
  438.             obj.detachEvent( "on"+type, obj[type+fn] );  
  439.             obj[type+fn] = null;  
  440.             obj["e"+type+fn] = null;  
  441.         }  
  442.     }  
  443.       
  444.     function arrayRemove(array, from, to) {  
  445.         var rest = array.slice((to || from) + 1 || array.length);  
  446.         array.length = from < 0 ? array.length + from : from;  
  447.         return array.push.apply(array, rest);  
  448.     };  
  449.       
  450.     function applyVisibility(vis) {  
  451.         for ( var i = 0, p; p = window.ASTEROIDSPLAYERS[i]; i++ ) {  
  452.             p.gameContainer.style.visibility = vis;  
  453.         }  
  454.     }  
  455.       
  456.     function getElementFromPoint(x, y) {  
  457.         // hide canvas so it isn't picked up  
  458.         applyVisibility('hidden');  
  459.  
  460.         var element = document.elementFromPoint(x, y);  
  461.  
  462.         if ( ! element ) {  
  463.             applyVisibility('visible');  
  464.             return false;  
  465.         }  
  466.  
  467.         if ( element.nodeType == 3 )  
  468.             element = element.parentNode;  
  469.  
  470.         // show the canvas again, hopefully it didn't blink  
  471.         applyVisibility('visible');  
  472.         return element;  
  473.     };  
  474.       
  475.     function addParticles(startPos) {  
  476.         var time = new Date().getTime();  
  477.         var amount = maxParticles;  
  478.         for ( var i = 0; i < amount; i++ ) {  
  479.             that.particles.push({  
  480.                 // random direction  
  481.                 dir: (new Vector(Math.random() * 20 - 10, Math.random() * 20 - 10)).normalize(),  
  482.                 pos: startPos.cp(),  
  483.                 cameAlive: time  
  484.             });  
  485.         }  
  486.     };  
  487.       
  488.     function setScore() {  
  489.         that.points.innerHTML = window.ASTEROIDS.enemiesKilled * 10;  
  490.     };  
  491.       
  492.     function hasOnlyTextualChildren(element) {  
  493.         if ( indexOf(hiddenTypes, element.tagName) != -1 ) return false;  
  494.         if ( element.offsetWidth == 0 && element.offsetHeight == 0 ) return false;  
  495.         for ( var i = 0; i < element.childNodes.length; i++ ) {  
  496.             // <br /> doesn't count... and empty elements  
  497.             if (  
  498.                 element.childNodes[i].nodeType != 3  
  499.                 && indexOf(hiddenTypes, element.childNodes[i].tagName) == -1  
  500.                 && element.childNodes[i].childNodes.length != 0  
  501.             ) return false;  
  502.         }  
  503.         return true;  
  504.     };  
  505.       
  506.     function indexOf(arr, item, from){  
  507.         if ( arr.indexOf ) return arr.indexOf(item, from);  
  508.         var len = arr.length;  
  509.         for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){  
  510.             if (arr[i] === item) return i;  
  511.         }  
  512.         return -1;  
  513.     };  
  514.       
  515.     // taken from MooTools Core  
  516.     function addClass(element, className) {  
  517.         if ( element.className.indexOf(className) == -1)  
  518.             element.className = (element.className + ' ' + className).replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '');  
  519.     };  
  520.       
  521.     // taken from MooTools Core  
  522.     function removeClass(element, className) {  
  523.         element.className = element.className.replace(new RegExp('(^|\s)' + className + '(?:\s|$)'), '$1');  
  524.     };  
  525.       
  526.     function addStylesheet(selector, rules) {  
  527.         var stylesheet = document.createElement('style');  
  528.         stylesheet.type = 'text/css';  
  529.         stylesheet.rel = 'stylesheet';  
  530.         stylesheet.id = 'ASTEROIDSYEAHSTYLES';  
  531.         try {  
  532.             stylesheet.innerHTML = selector + "{" + rules + "}";  
  533.         } catch ( e ) {  
  534.             stylesheet.styleSheet.addRule(selector, rules);  
  535.         }  
  536.         document.getElementsByTagName("head")[0].appendChild(stylesheet);  
  537.     };  
  538.       
  539.     function removeStylesheet(name) {  
  540.         var stylesheet = document.getElementById(name);  
  541.         if ( stylesheet ) {  
  542.             stylesheet.parentNode.removeChild(stylesheet);  
  543.         }  
  544.     };  
  545.       
  546.     /*  
  547.         == Setup ==  
  548.     */  
  549.     this.gameContainer = document.createElement('div');  
  550.     this.gameContainer.className = 'ASTEROIDSYEAH';  
  551.     document.body.appendChild(this.gameContainer);  
  552.       
  553.     this.canvas = document.createElement('canvas');  
  554.     this.canvas.setAttribute('width', w);  
  555.     this.canvas.setAttribute('height', h);  
  556.     this.canvas.className = 'ASTEROIDSYEAH';  
  557.     with ( this.canvas.style ) {  
  558.         width = w + "px";  
  559.         height = h + "px";  
  560.         position = "fixed";  
  561.         top = "0px";  
  562.         left = "0px";  
  563.         bottom = "0px";  
  564.         right = "0px";  
  565.         zIndex = "10000";  
  566.     }  
  567.       
  568.     // Is IE  
  569.     if ( typeof G_vmlCanvasManager != 'undefined' ) {  
  570.         this.canvas = G_vmlCanvasManager.initElement(this.canvas);  
  571.         if ( ! this.canvas.getContext ) {  
  572.             alert("So... you're using IE?  Please join me at http://github.com/erkie/erkie.github.com if you think you can help");  
  573.         }  
  574.     } else {  
  575.         if ( ! this.canvas.getContext ) {  
  576.             alert('This program does not yet support your browser. Please join me at http://github.com/erkie/erkie.github.com if you think you can help');  
  577.         }  
  578.     }  
  579.       
  580.     addEvent(this.canvas, 'mousedown', function(e) {  
  581.         e = e || window.event;  
  582.         var message = document.createElement('span');  
  583.         message.style.position = 'absolute';  
  584.         message.style.border = '1px solid #999';  
  585.         message.style.background = 'white';  
  586.         message.style.color = "black";  
  587.         message.innerHTML = 'Press Esc to quit';  
  588.         document.body.appendChild(message);  
  589.           
  590.         var x = e.pageX || (e.clientX + document.documentElement.scrollLeft);  
  591.         var y = e.pageY || (e.clientY + document.documentElement.scrollTop);  
  592.         message.style.left = x - message.offsetWidth/2 + 'px';  
  593.         message.style.top = y - message.offsetHeight/2 + 'px';  
  594.           
  595.         setTimeout(function() {  
  596.             try {  
  597.                 message.parentNode.removeChild(message);  
  598.             } catch ( e ) {}  
  599.         }, 1000);  
  600.     });  
  601.       
  602.     var eventResize = function() {  
  603.         w = document.documentElement.clientWidth;  
  604.         h = document.documentElement.clientHeight;  
  605.           
  606.         that.canvas.setAttribute('width', w);  
  607.         that.canvas.setAttribute('height', h);  
  608.     };  
  609.     addEvent(window, 'resize', eventResize);  
  610.       
  611.     this.gameContainer.appendChild(this.canvas);  
  612.     this.ctx = this.canvas.getContext("2d");  
  613.       
  614.     this.ctx.fillStyle = "black";  
  615.     this.ctx.strokeStyle = "black";  
  616.       
  617.     // navigation wrapper element  
  618.     if ( ! document.getElementById('ASTEROIDS-NAVIGATION') ) {  
  619.         this.navigation = document.createElement('div');  
  620.         this.navigation.id = "ASTEROIDS-NAVIGATION";  
  621.         this.navigation.className = "ASTEROIDSYEAH";  
  622.         with ( this.navigation.style ) {  
  623.             fontFamily = "Arial,sans-serif";  
  624.             position = "fixed";  
  625.             zIndex = "10001";  
  626.             bottom = "10px";  
  627.             right = "10px";  
  628.             textAlign = "right";  
  629.         }  
  630.         this.navigation.innerHTML = "(press esc to quit) ";  
  631.         this.gameContainer.appendChild(this.navigation);  
  632.           
  633.         // points  
  634.         this.points = document.createElement('span');  
  635.         this.points.id = 'ASTEROIDS-POINTS';  
  636.         this.points.style.font = "28pt Arial, sans-serif";  
  637.         this.points.style.fontWeight = "bold";  
  638.         this.points.className = "ASTEROIDSYEAH";  
  639.         this.navigation.appendChild(this.points);  
  640.     } else {  
  641.         this.navigation = document.getElementById('ASTEROIDS-NAVIGATION');  
  642.         this.points = document.getElementById('ASTEROIDS-POINTS');  
  643.     }  
  644.       
  645.     setScore();  
  646.       
  647.     // highscore link  
  648.     /*this.highscoreLink = document.createElement('a');  
  649.     this.highscoreLink.className = "ASTEROIDSYEAH";  
  650.     this.highscoreLink.style.display = "block";  
  651.     this.highscoreLink.href = '#';  
  652.     this.highscoreLink.innerHTML = "Help/Submit highscore?";  
  653.     this.navigation.appendChild(this.highscoreLink);  
  654.       
  655.     this.highscoreLink.onclick = function() {  
  656.         if ( ! that.highscores ) {  
  657.             that.highscores = new Highscores();  
  658.         }  
  659.         that.highscores.show();  
  660.         return false;  
  661.     };*/  
  662.       
  663.     // For ie  
  664.     if ( typeof G_vmlCanvasManager != 'undefined' ) {  
  665.         var children = this.canvas.getElementsByTagName('*');  
  666.         for ( var i = 0, c; c = children[i]; i++ )  
  667.             addClass(c, 'ASTEROIDSYEAH');  
  668.     }  
  669.       
  670.     /*  
  671.         == Events ==  
  672.     */  
  673.       
  674.     var eventKeydown = function(event) {  
  675.         event = event || window.event;  
  676.         that.keysPressed[event.keyCode] = true;  
  677.           
  678.         switch ( event.keyCode ) {  
  679.             case code(' '):  
  680.                 that.firedAt = 1;  
  681.             break;  
  682.         }  
  683.           
  684.         // check here so we can stop propagation appropriately  
  685.         if ( indexOf([code('up'), code('down'), code('right'), code('left'), code(' '), code('B'), code('W'), code('A'), code('S'), code('D')], event.keyCode) != -1 ) {  
  686.             if ( event.preventDefault )  
  687.                 event.preventDefault();  
  688.             if ( event.stopPropagation)  
  689.                 event.stopPropagation();  
  690.             event.returnValue = false;  
  691.             event.cancelBubble = true;  
  692.             return false;  
  693.         }  
  694.     };  
  695.     addEvent(document, 'keydown', eventKeydown);  
  696.       
  697.     var eventKeypress = function(event) {  
  698.         event = event || window.event;  
  699.         if ( indexOf([code('up'), code('down'), code('right'), code('left'), code(' '), code('W'), code('A'), code('S'), code('D')], event.keyCode || event.which) != -1 ) {  
  700.             if ( event.preventDefault )  
  701.                 event.preventDefault();  
  702.             if ( event.stopPropagation )  
  703.                 event.stopPropagation();  
  704.             event.returnValue = false;  
  705.             event.cancelBubble = true;  
  706.             return false;  
  707.         }  
  708.     };  
  709.     addEvent(document, 'keypress', eventKeypress);  
  710.       
  711.     var eventKeyup = function(event) {  
  712.         event = event || window.event;  
  713.         that.keysPressed[event.keyCode] = false;  
  714.  
  715.         if ( indexOf([code('up'), code('down'), code('right'), code('left'), code(' '), code('B'), code('W'), code('A'), code('S'), code('D')], event.keyCode) != -1 ) {  
  716.             if ( event.preventDefault )  
  717.                 event.preventDefault();  
  718.             if ( event.stopPropagation )  
  719.                 event.stopPropagation();  
  720.             event.returnValue = false;  
  721.             event.cancelBubble = true;  
  722.             return false;  
  723.         }  
  724.     };  
  725.     addEvent(document, 'keyup', eventKeyup);  
  726.       
  727.     /*  
  728.         Context operations  
  729.     */  
  730.       
  731.     this.ctx.clear = function() {  
  732.         this.clearRect(0, 0, w, h);  
  733.     };  
  734.       
  735.     this.ctx.clear();  
  736.       
  737.     this.ctx.drawLine = function(xFrom, yFrom, xTo, yTo) {  
  738.         this.beginPath();  
  739.         this.moveTo(xFrom, yFrom);  
  740.         this.lineTo(xTo, yTo);  
  741.         this.lineTo(xTo + 1, yTo + 1);  
  742.         this.closePath();  
  743.         this.fill();  
  744.     };  
  745.       
  746.     this.ctx.tracePoly = function(verts) {  
  747.         this.beginPath();  
  748.         this.moveTo(verts[0][0], verts[0][1]);  
  749.         for ( var i = 1; i < verts.length; i++ )  
  750.             this.lineTo(verts[i][0], verts[i][1]);  
  751.         this.closePath();  
  752.     };  
  753.       
  754.     this.ctx.drawPlayer = function() {  
  755.         this.save();  
  756.         this.translate(that.pos.x, that.pos.y);  
  757.         this.rotate(that.dir.angle());  
  758.         this.tracePoly(playerVerts);  
  759.         this.fillStyle = "white";  
  760.         this.fill();  
  761.         this.tracePoly(playerVerts);  
  762.         this.stroke();  
  763.         this.restore();  
  764.     };  
  765.       
  766.     var PI_SQ = Math.PI*2;  
  767.       
  768.     this.ctx.drawBullets = function(bullets) {  
  769.         for ( var i = 0; i < bullets.length; i++ ) {  
  770.             this.beginPath();  
  771.             this.arc(bullets[i].pos.x, bullets[i].pos.y, bulletRadius, 0, PI_SQ, true);  
  772.             this.closePath();  
  773.             this.fill();  
  774.         }  
  775.     };  
  776.       
  777.     var randomParticleColor = function() {  
  778.         return (['red', 'yellow'])[random(0, 1)];  
  779.     };  
  780.       
  781.     this.ctx.drawParticles = function(particles) {  
  782.         var oldColor = this.fillStyle;  
  783.           
  784.         for ( var i = 0; i < particles.length; i++ ) {  
  785.             this.fillStyle = randomParticleColor();  
  786.             this.drawLine(particles[i].pos.x, particles[i].pos.y, particles[i].pos.x - particles[i].dir.x * 10, particles[i].pos.y - particles[i].dir.y * 10);  
  787.         }  
  788.           
  789.         this.fillStyle = oldColor;  
  790.     };  
  791.       
  792.     this.ctx.drawFlames = function(flame) {  
  793.         this.save();  
  794.           
  795.         this.translate(that.pos.x, that.pos.y);  
  796.         this.rotate(that.dir.angle());  
  797.           
  798.         var oldColor = this.strokeStyle;  
  799.         this.strokeStyle = "red";  
  800.         this.tracePoly(flame.r);  
  801.         this.stroke();  
  802.           
  803.         this.strokeStyle = "yellow";  
  804.         this.tracePoly(flame.y);  
  805.         this.stroke();  
  806.           
  807.         this.strokeStyle = oldColor;  
  808.         this.restore();  
  809.     }  
  810.       
  811.     /*  
  812.         Game loop  
  813.     */  
  814.       
  815.     addParticles(this.pos);  
  816.     addClass(document.body, 'ASTEROIDSYEAH');  
  817.       
  818.     var isRunning = true;  
  819.     var lastUpdate = new Date().getTime();  
  820.       
  821.     this.update = function() {  
  822.         var forceChange = false;  
  823.           
  824.         // ==  
  825.         // logic  
  826.         // ==  
  827.         var nowTime = new Date().getTime();  
  828.         var tDelta = (nowTime - lastUpdate) / 1000;  
  829.         lastUpdate = nowTime;  
  830.           
  831.         // update flame and timer if needed  
  832.         var drawFlame = false;  
  833.         if ( nowTime - this.updated.flame > 50 ) {  
  834.             createFlames();  
  835.             this.updated.flame = nowTime;  
  836.         }  
  837.           
  838.         this.scrollPos.x = window.pageXOffset || document.documentElement.scrollLeft;  
  839.         this.scrollPos.y = window.pageYOffset || document.documentElement.scrollTop;  
  840.           
  841.         // update player  
  842.         // move forward  
  843.         if ( (this.keysPressed[code('up')]) || (this.keysPressed[code('W')]) ) {  
  844.             this.vel.add(this.dir.mulNew(acc * tDelta));  
  845.               
  846.             drawFlame = true;  
  847.         } else {          
  848.             // decrease speed of player  
  849.             this.vel.mul(0.96);  
  850.         }  
  851.           
  852.         // rotate counter-clockwise  
  853.         if ( (this.keysPressed[code('left')]) || (this.keysPressed[code('A')]) ) {  
  854.             forceChange = true;  
  855.             this.dir.rotate(radians(rotSpeed * tDelta * -1));  
  856.         }  
  857.           
  858.         // rotate clockwise  
  859.         if ( (this.keysPressed[code('right')]) || (this.keysPressed[code('D')]) ) {  
  860.             forceChange = true;  
  861.             this.dir.rotate(radians(rotSpeed * tDelta));  
  862.         }  
  863.           
  864.         // fire  
  865.         if ( this.keysPressed[code(' ')] && nowTime - this.firedAt > timeBetweenFire ) {  
  866.             this.bullets.unshift({  
  867.                 'dir': this.dir.cp(),  
  868.                 'pos': this.pos.cp(),  
  869.                 'startVel': this.vel.cp(),  
  870.                 'cameAlive': nowTime  
  871.             });  
  872.               
  873.             this.firedAt = nowTime;  
  874.               
  875.             if ( this.bullets.length > maxBullets ) {  
  876.                 this.bullets.pop();  
  877.             }  
  878.         }  
  879.           
  880.         // add blink  
  881.         if ( this.keysPressed[code('B')] ) {  
  882.             if ( ! this.updated.enemies ) {  
  883.                 updateEnemyIndex();  
  884.                 this.updated.enemies = true;  
  885.             }  
  886.               
  887.             forceChange = true;  
  888.               
  889.             this.updated.blink.time += tDelta * 1000;  
  890.             if ( this.updated.blink.time > timeBetweenBlink ) {  
  891.                 this.toggleBlinkStyle();  
  892.                 this.updated.blink.time = 0;  
  893.             }  
  894.         } else {  
  895.             this.updated.enemies = false;  
  896.         }  
  897.           
  898.         if ( this.keysPressed[code('esc')] ) {  
  899.             destroy.apply(this);  
  900.             return;  
  901.         }  
  902.           
  903.         // cap speed  
  904.         if ( this.vel.len() > maxSpeed ) {  
  905.             this.vel.setLength(maxSpeed);  
  906.         }  
  907.           
  908.         // add velocity to player (physics)  
  909.         this.pos.add(this.vel.mulNew(tDelta));  
  910.           
  911.         // check bounds X of player, if we go outside we scroll accordingly  
  912.         if ( this.pos.x > w ) {  
  913.             window.scrollTo(this.scrollPos.x + 50, this.scrollPos.y);  
  914.             this.pos.x = 0;  
  915.         } else if ( this.pos.x < 0 ) {  
  916.             window.scrollTo(this.scrollPos.x - 50, this.scrollPos.y);  
  917.             this.pos.x = w;  
  918.         }  
  919.           
  920.         // check bounds Y  
  921.         if ( this.pos.y > h ) {  
  922.             window.scrollTo(this.scrollPos.x, this.scrollPos.y + h * 0.75);  
  923.             this.pos.y = 0;  
  924.         } else if ( this.pos.y < 0 ) {  
  925.             window.scrollTo(this.scrollPos.x, this.scrollPos.y - h * 0.75);  
  926.             this.pos.y = h;  
  927.         }  
  928.           
  929.         // update positions of bullets  
  930.         for ( var i = this.bullets.length - 1; i >= 0; i-- ) {  
  931.             // bullets should only live for 2 seconds  
  932.             if ( nowTime - this.bullets[i].cameAlive > 2000 ) {  
  933.                 this.bullets.splice(i, 1);  
  934.                 forceChange = true;  
  935.                 continue;  
  936.             }  
  937.               
  938.             var bulletVel = this.bullets[i].dir.setLengthNew(bulletSpeed * tDelta).add(this.bullets[i].startVel.mulNew(tDelta));  
  939.               
  940.             this.bullets[i].pos.add(bulletVel);  
  941.             boundsCheck(this.bullets[i].pos);  
  942.               
  943.             // check collisions  
  944.             var murdered = getElementFromPoint(this.bullets[i].pos.x, this.bullets[i].pos.y);  
  945.             if (  
  946.                 murdered && murdered.tagName &&  
  947.                 indexOf(ignoredTypes, murdered.tagName.toUpperCase()) == -1 &&  
  948.                 hasOnlyTextualChildren(murdered) && murdered.className != "ASTEROIDSYEAH"  
  949.             ) {  
  950.                 didKill = true;  
  951.                 addParticles(this.bullets[i].pos);  
  952.                 this.dying.push(murdered);  
  953.               
  954.                 this.bullets.splice(i, 1);  
  955.                 continue;  
  956.             }  
  957.         }  
  958.           
  959.         if (this.dying.length) {  
  960.             for ( var i = this.dying.length - 1; i >= 0; i-- ) {  
  961.                 try {  
  962.                     // If we have multiple spaceships it might have already been removed  
  963.                     if ( this.dying[i].parentNode )  
  964.                         window.ASTEROIDS.enemiesKilled++;  
  965.  
  966.                     this.dying[i].parentNode.removeChild(this.dying[i]);  
  967.                 } catch ( e ) {}  
  968.             }  
  969.  
  970.             setScore();  
  971.             this.dying = [];  
  972.         }  
  973.  
  974.         // update particles position  
  975.         for ( var i = this.particles.length - 1; i >= 0; i-- ) {  
  976.             this.particles[i].pos.add(this.particles[i].dir.mulNew(particleSpeed * tDelta * Math.random()));  
  977.               
  978.             if ( nowTime - this.particles[i].cameAlive > 1000 ) {  
  979.                 this.particles.splice(i, 1);  
  980.                 forceChange = true;  
  981.                 continue;  
  982.             }  
  983.         }  
  984.           
  985.         // ==  
  986.         // drawing  
  987.         // ==  
  988.           
  989.         // clear  
  990.         if ( forceChange || this.bullets.length != 0 || this.particles.length != 0 || ! this.pos.is(this.lastPos) || this.vel.len() > 0 ) {  
  991.             this.ctx.clear();  
  992.               
  993.             // draw player  
  994.             this.ctx.drawPlayer();  
  995.               
  996.             // draw flames  
  997.             if ( drawFlame )  
  998.                 this.ctx.drawFlames(that.flame);  
  999.               
  1000.             // draw bullets  
  1001.             if (this.bullets.length) {  
  1002.                 this.ctx.drawBullets(this.bullets);  
  1003.             }  
  1004.               
  1005.             // draw particles  
  1006.             if (this.particles.length) {  
  1007.                 this.ctx.drawParticles(this.particles);  
  1008.             }  
  1009.         }  
  1010.         this.lastPos = this.pos;  
  1011.           
  1012.         setTimeout(updateFunc, 1000 / FPS);  
  1013.     }  
  1014.       
  1015.     // Start timer  
  1016.     var updateFunc = function() {  
  1017.         that.update.call(that);  
  1018.     };  
  1019.     setTimeout(updateFunc, 1000 / FPS);  
  1020.       
  1021.     function destroy() {  
  1022.         removeEvent(document, 'keydown', eventKeydown);  
  1023.         removeEvent(document, 'keypress', eventKeypress);  
  1024.         removeEvent(document, 'keyup', eventKeyup);  
  1025.         removeEvent(window, 'resize', eventResize);  
  1026.         isRunning = false;  
  1027.         removeStylesheet("ASTEROIDSYEAHSTYLES");  
  1028.         removeClass(document.body, 'ASTEROIDSYEAH');  
  1029.         this.gameContainer.parentNode.removeChild(this.gameContainer);  
  1030.     };  
  1031. }  
  1032.  
  1033. if ( ! window.ASTEROIDSPLAYERS )  
  1034.     window.ASTEROIDSPLAYERS = [];  
  1035.  
  1036. if ( window.ActiveXObject ) {  
  1037.     try {  
  1038.         var xamlScript = document.createElement('script');  
  1039.         xamlScript.setAttribute('type', 'text/xaml');  
  1040.         xamlScript.textContent = '<?xml version="1.0"?><Canvas xmlns="http://schemas.microsoft.com/client/2007"></Canvas>';  
  1041.         document.getElementsByTagName('head')[0].appendChild(xamlScript);  
  1042.     } catch ( e ) {}  
  1043.       
  1044.     var script = document.createElement("script");  
  1045.     script.setAttribute('type', 'text/javascript');  
  1046.     script.onreadystatechange = function() {  
  1047.         if ( script.readyState == 'loaded' || script.readyState == 'complete' ) {  
  1048.             if ( typeof G_vmlCanvasManager != "undefined" )  
  1049.                 window.ASTEROIDSPLAYERS[window.ASTEROIDSPLAYERS.length] = new Asteroids();  
  1050.         }  
  1051.     };  
  1052.     script.src = "http://erkie.github.com/excanvas.js";  
  1053.     document.getElementsByTagName('head')[0].appendChild(script);  
  1054. }  
  1055. else window.ASTEROIDSPLAYERS[window.ASTEROIDSPLAYERS.length] = new Asteroids();  
  1056.  
  1057. })();  
  1058.  

2.Datei asteroids.min.js
  1.  
  2. (function(){function Asteroids(){if(!window.ASTEROIDS)  
  3. window.ASTEROIDS={enemiesKilled:0};function Vector(x,y){if(typeof x=='Object'){this.x=x.x;this.y=x.y;}else{this.x=x;this.y=y;}};Vector.prototype={cp:function(){return new Vector(this.x,this.y);},mul:function(factor){this.x*=factor;this.y*=factor;return this;},mulNew:function(factor){return new Vector(this.x*factor,this.y*factor);},add:function(vec){this.x+=vec.x;this.y+=vec.y;return this;},addNew:function(vec){return new Vector(this.x+vec.x,this.y+vec.y);},sub:function(vec){this.x-=vec.x;this.y-=vec.y;return this;},subNew:function(vec){return new Vector(this.x-vec.x,this.y-vec.y);},rotate:function(angle){var x=this.x,y=this.y;this.x=x*Math.cos(angle)-Math.sin(angle)*y;this.y=x*Math.sin(angle)+Math.cos(angle)*y;return this;},rotateNew:function(angle){return this.cp().rotate(angle);},setAngle:function(angle){var l=this.len();this.x=Math.cos(angle)*l;this.y=Math.sin(angle)*l;return this;},setAngleNew:function(angle){return this.cp().setAngle(angle);},setLength:function(length){var l=this.len();if(l)this.mul(length/l);else this.x=this.y=length;return this;},setLengthNew:function(length){return this.cp().setLength(length);},normalize:function(){var l=this.len();this.x/=l;this.y/=l;return this;},normalizeNew:function(){return this.cp().normalize();},angle:function(){return Math.atan2(this.y,this.x);},collidesWith:function(rect){return this.x>rect.x&&this.y>rect.y&&this.x<rect.x+rect.width&&this.y<rect.y+rect.height;},len:function(){var l=Math.sqrt(this.x*this.x+this.y*this.y);if(l<0.005&&l>-0.005)return 0;return l;},is:function(test){return typeof test=='object'&&this.x==test.x&&this.y==test.y;},toString:function(){return'[Vector('+this.x+', '+this.y+') angle: '+this.angle()+', length: '+this.len()+']';}};function Line(p1,p2){this.p1=p1;this.p2=p2;};Line.prototype={shift:function(pos){this.p1.add(pos);this.p2.add(pos);},intersectsWithRect:function(rect){var LL=new Vector(rect.x,rect.y+rect.height);var UL=new Vector(rect.x,rect.y);var LR=new Vector(rect.x+rect.width,rect.y+rect.height);var UR=new Vector(rect.x+rect.width,rect.y);if(this.p1.x>LL.x&&this.p1.x<UR.x&&this.p1.y<LL.y&&this.p1.y>UR.y&&this.p2.x>LL.x&&this.p2.x<UR.x&&this.p2.y<LL.y&&this.p2.y>UR.y)return true;if(this.intersectsLine(new Line(UL,LL)))return true;if(this.intersectsLine(new Line(LL,LR)))return true;if(this.intersectsLine(new Line(UL,UR)))return true;if(this.intersectsLine(new Line(UR,LR)))return true;return false;},intersectsLine:function(line2){var v1=this.p1,v2=this.p2;var v3=line2.p1,v4=line2.p2;var denom=((v4.y-v3.y)*(v2.x-v1.x))-((v4.x-v3.x)*(v2.y-v1.y));var numerator=((v4.x-v3.x)*(v1.y-v3.y))-((v4.y-v3.y)*(v1.x-v3.x));var numerator2=((v2.x-v1.x)*(v1.y-v3.y))-((v2.y-v1.y)*(v1.x-v3.x));if(denom==0.0){return false;}  
  4. var ua=numerator/denom;var ub=numerator2/denom;return(ua>=0.0&&ua<=1.0&&ub>=0.0&&ub<=1.0);}};var that=this;var isIE=!!window.ActiveXObject;var w=document.documentElement.clientWidth,h=document.documentElement.clientHeight;var playerWidth=20,playerHeight=30;var playerVerts=[[-1*playerHeight/2,-1*playerWidth/2],[-1*playerHeight/2,playerWidth/2],[playerHeight/2,0]];var ignoredTypes=['HTML','HEAD','BODY','SCRIPT','TITLE','META','STYLE','LINK','SHAPE','LINE','GROUP','IMAGE','STROKE','FILL','SKEW','PATH','TEXTPATH'];var hiddenTypes=['BR','HR'];var FPS=50;var acc=300;var maxSpeed=600;var rotSpeed=360;var bulletSpeed=700;var particleSpeed=400;var timeBetweenFire=150;var timeBetweenBlink=250;var timeBetweenEnemyUpdate=isIE?10000:2000;var bulletRadius=2;var maxParticles=isIE?20:40;var maxBullets=isIE?10:20;this.flame={r:[],y:[]};this.toggleBlinkStyle=function(){if(this.updated.blink.isActive){removeClass(document.body,'ASTEROIDSBLINK');}else{addClass(document.body,'ASTEROIDSBLINK');}  
  5. this.updated.blink.isActive=!this.updated.blink.isActive;};addStylesheet(".ASTEROIDSBLINK .ASTEROIDSYEAHENEMY","outline: 2px dotted red;");this.pos=new Vector(100,100);this.lastPos=false;this.vel=new Vector(0,0);this.dir=new Vector(0,1);this.keysPressed={};this.firedAt=false;this.updated={enemies:false,flame:new Date().getTime(),blink:{time:0,isActive:false}};this.scrollPos=new Vector(0,0);this.bullets=[];this.enemies=[];this.dying=[];this.totalEnemies=0;this.particles=[];function updateEnemyIndex(){for(var i=0,enemy;enemy=that.enemies[i];i++)  
  6. removeClass(enemy,"ASTEROIDSYEAHENEMY");var all=document.body.getElementsByTagName('*');that.enemies=[];for(var i=0,el;el=all[i];i++){if(indexOf(ignoredTypes,el.tagName.toUpperCase())==-1&&el.prefix!='g_vml_'&&hasOnlyTextualChildren(el)&&el.className!="ASTEROIDSYEAH"&&el.offsetHeight>0){el.aSize=size(el);that.enemies.push(el);addClass(el,"ASTEROIDSYEAHENEMY");if(!el.aAdded){el.aAdded=true;that.totalEnemies++;}}}};updateEnemyIndex();var createFlames;(function(){var rWidth=playerWidth,rIncrease=playerWidth*0.1,yWidth=playerWidth*0.6,yIncrease=yWidth*0.2,halfR=rWidth/2,halfY=yWidth/2,halfPlayerHeight=playerHeight/2;createFlames=function(){that.flame.r=[[-1*halfPlayerHeight,-1*halfR]];that.flame.y=[[-1*halfPlayerHeight,-1*halfY]];for(var x=0;x<rWidth;x+=rIncrease){that.flame.r.push([-random(2,7)-halfPlayerHeight,x-halfR]);}  
  7. that.flame.r.push([-1*halfPlayerHeight,halfR]);for(var x=0;x<yWidth;x+=yIncrease){that.flame.y.push([-random(2,7)-halfPlayerHeight,x-halfY]);}  
  8. that.flame.y.push([-1*halfPlayerHeight,halfY]);};})();createFlames();function radians(deg){return deg*0.0174532925;};function degrees(rad){return rad*57.2957795;};function random(from,to){return Math.floor(Math.random()*(to+1)+from);};function code(name){var table={'up':38,'down':40,'left':37,'right':39,'esc':27};if(table[name])return table[name];return name.charCodeAt(0);};function boundsCheck(vec){if(vec.x>w)  
  9. vec.x=0;else if(vec.x<0)  
  10. vec.x=w;if(vec.y>h)  
  11. vec.y=0;else if(vec.y<0)  
  12. vec.y=h;};function size(element){var el=element,left=0,top=0;do{left+=el.offsetLeft||0;top+=el.offsetTop||0;el=el.offsetParent;}while(el);return{x:left,y:top,width:element.offsetWidth||10,height:element.offsetHeight||10};};function addEvent(obj,type,fn){if(obj.addEventListener)  
  13. obj.addEventListener(type,fn,false);else if(obj.attachEvent){obj["e"+type+fn]=fn;obj[type+fn]=function(){obj["e"+type+fn](window.event);}  
  14. obj.attachEvent("on"+type,obj[type+fn]);}}  
  15. function removeEvent(obj,type,fn){if(obj.removeEventListener)  
  16. obj.removeEventListener(type,fn,false);else if(obj.detachEvent){obj.detachEvent("on"+type,obj[type+fn]);obj[type+fn]=null;obj["e"+type+fn]=null;}}  
  17. function arrayRemove(array,from,to){var rest=array.slice((to||from)+1||array.length);array.length=from<0?array.length+from:from;return array.push.apply(array,rest);};function applyVisibility(vis){for(var i=0,p;p=window.ASTEROIDSPLAYERS[i];i++){p.gameContainer.style.visibility=vis;}}  
  18. function getElementFromPoint(x,y){applyVisibility('hidden');var element=document.elementFromPoint(x,y);if(!element){applyVisibility('visible');return false;}  
  19. if(element.nodeType==3)  
  20. element=element.parentNode;applyVisibility('visible');return element;};function addParticles(startPos){var time=new Date().getTime();var amount=maxParticles;for(var i=0;i<amount;i++){that.particles.push({dir:(new Vector(Math.random()*20-10,Math.random()*20-10)).normalize(),pos:startPos.cp(),cameAlive:time});}};function setScore(){that.points.innerHTML=window.ASTEROIDS.enemiesKilled*10;};function hasOnlyTextualChildren(element){if(indexOf(hiddenTypes,element.tagName)!=-1)return false;if(element.offsetWidth==0&&element.offsetHeight==0)return false;for(var i=0;i<element.childNodes.length;i++){if(element.childNodes[i].nodeType!=3&&indexOf(hiddenTypes,element.childNodes[i].tagName)==-1&&element.childNodes[i].childNodes.length!=0)return false;}  
  21. return true;};function indexOf(arr,item,from){if(arr.indexOf)return arr.indexOf(item,from);var len=arr.length;for(var i=(from<0)?Math.max(0,len+from):from||0;i<len;i++){if(arr[i]===item)return i;}  
  22. return-1;};function addClass(element,className){if(element.className.indexOf(className)==-1)  
  23. element.className=(element.className+' '+className).replace(/\s+/g,' ').replace(/^\s+|\s+$/g,'');};function removeClass(element,className){element.className=element.className.replace(new RegExp('(^|\s)'+className+'(?:\s|$)'),'$1');};function addStylesheet(selector,rules){var stylesheet=document.createElement('style');stylesheet.type='text/css';stylesheet.rel='stylesheet';stylesheet.id='ASTEROIDSYEAHSTYLES';try{stylesheet.innerHTML=selector+"{"+rules+"}";}catch(e){stylesheet.styleSheet.addRule(selector,rules);}  
  24. document.getElementsByTagName("head")[0].appendChild(stylesheet);};function removeStylesheet(name){var stylesheet=document.getElementById(name);if(stylesheet){stylesheet.parentNode.removeChild(stylesheet);}};this.gameContainer=document.createElement('div');this.gameContainer.className='ASTEROIDSYEAH';document.body.appendChild(this.gameContainer);this.canvas=document.createElement('canvas');this.canvas.setAttribute('width',w);this.canvas.setAttribute('height',h);this.canvas.className='ASTEROIDSYEAH';with(this.canvas.style){width=w+"px";height=h+"px";position="fixed";top="0px";left="0px";bottom="0px";right="0px";zIndex="10000";}  
  25. if(typeof G_vmlCanvasManager!='undefined'){this.canvas=G_vmlCanvasManager.initElement(this.canvas);if(!this.canvas.getContext){alert("So... you're using IE?  Please join me at http://github.com/erkie/erkie.github.com if you think you can help");}}else{if(!this.canvas.getContext){alert('This program does not yet support your browser. Please join me at http://github.com/erkie/erkie.github.com if you think you can help');}}  
  26. addEvent(this.canvas,'mousedown',function(e){e=e||window.event;var message=document.createElement('span');message.style.position='absolute';message.style.border='1px solid #999';message.style.background='white';message.style.color="black";message.innerHTML='Press Esc to quit';document.body.appendChild(message);var x=e.pageX||(e.clientX+document.documentElement.scrollLeft);var y=e.pageY||(e.clientY+document.documentElement.scrollTop);message.style.left=x-message.offsetWidth/2+'px';message.style.top=y-message.offsetHeight/2+'px';setTimeout(function(){try{message.parentNode.removeChild(message);}catch(e){}},1000);});var eventResize=function(){w=document.documentElement.clientWidth;h=document.documentElement.clientHeight;that.canvas.setAttribute('width',w);that.canvas.setAttribute('height',h);};addEvent(window,'resize',eventResize);this.gameContainer.appendChild(this.canvas);this.ctx=this.canvas.getContext("2d");this.ctx.fillStyle="black";this.ctx.strokeStyle="black";if(!document.getElementById('ASTEROIDS-NAVIGATION')){this.navigation=document.createElement('div');this.navigation.id="ASTEROIDS-NAVIGATION";this.navigation.className="ASTEROIDSYEAH";with(this.navigation.style){fontFamily="Arial,sans-serif";position="fixed";zIndex="10001";bottom="10px";right="10px";textAlign="right";}  
  27. this.navigation.innerHTML="(press esc to quit) ";this.gameContainer.appendChild(this.navigation);this.points=document.createElement('span');this.points.id='ASTEROIDS-POINTS';this.points.style.font="28pt Arial, sans-serif";this.points.style.fontWeight="bold";this.points.className="ASTEROIDSYEAH";this.navigation.appendChild(this.points);}else{this.navigation=document.getElementById('ASTEROIDS-NAVIGATION');this.points=document.getElementById('ASTEROIDS-POINTS');}  
  28. setScore();if(typeof G_vmlCanvasManager!='undefined'){var children=this.canvas.getElementsByTagName('*');for(var i=0,c;c=children[i];i++)  
  29. addClass(c,'ASTEROIDSYEAH');}  
  30. var eventKeydown=function(event){event=event||window.event;that.keysPressed[event.keyCode]=true;switch(event.keyCode){case code(' '):that.firedAt=1;break;}  
  31. if(indexOf([code('up'),code('down'),code('right'),code('left'),code(' '),code('B'),code('W'),code('A'),code('S'),code('D')],event.keyCode)!=-1){if(event.preventDefault)  
  32. event.preventDefault();if(event.stopPropagation)  
  33. event.stopPropagation();event.returnValue=false;event.cancelBubble=true;return false;}};addEvent(document,'keydown',eventKeydown);var eventKeypress=function(event){event=event||window.event;if(indexOf([code('up'),code('down'),code('right'),code('left'),code(' '),code('W'),code('A'),code('S'),code('D')],event.keyCode||event.which)!=-1){if(event.preventDefault)  
  34. event.preventDefault();if(event.stopPropagation)  
  35. event.stopPropagation();event.returnValue=false;event.cancelBubble=true;return false;}};addEvent(document,'keypress',eventKeypress);var eventKeyup=function(event){event=event||window.event;that.keysPressed[event.keyCode]=false;if(indexOf([code('up'),code('down'),code('right'),code('left'),code(' '),code('B'),code('W'),code('A'),code('S'),code('D')],event.keyCode)!=-1){if(event.preventDefault)  
  36. event.preventDefault();if(event.stopPropagation)  
  37. event.stopPropagation();event.returnValue=false;event.cancelBubble=true;return false;}};addEvent(document,'keyup',eventKeyup);this.ctx.clear=function(){this.clearRect(0,0,w,h);};this.ctx.clear();this.ctx.drawLine=function(xFrom,yFrom,xTo,yTo){this.beginPath();this.moveTo(xFrom,yFrom);this.lineTo(xTo,yTo);this.lineTo(xTo+1,yTo+1);this.closePath();this.fill();};this.ctx.tracePoly=function(verts){this.beginPath();this.moveTo(verts[0][0],verts[0][1]);for(var i=1;i<verts.length;i++)  
  38. this.lineTo(verts[i][0],verts[i][1]);this.closePath();};this.ctx.drawPlayer=function(){this.save();this.translate(that.pos.x,that.pos.y);this.rotate(that.dir.angle());this.tracePoly(playerVerts);this.fillStyle="white";this.fill();this.tracePoly(playerVerts);this.stroke();this.restore();};var PI_SQ=Math.PI*2;this.ctx.drawBullets=function(bullets){for(var i=0;i<bullets.length;i++){this.beginPath();this.arc(bullets[i].pos.x,bullets[i].pos.y,bulletRadius,0,PI_SQ,true);this.closePath();this.fill();}};var randomParticleColor=function(){return(['red','yellow'])[random(0,1)];};this.ctx.drawParticles=function(particles){var oldColor=this.fillStyle;for(var i=0;i<particles.length;i++){this.fillStyle=randomParticleColor();this.drawLine(particles[i].pos.x,particles[i].pos.y,particles[i].pos.x-particles[i].dir.x*10,particles[i].pos.y-particles[i].dir.y*10);}  
  39. this.fillStyle=oldColor;};this.ctx.drawFlames=function(flame){this.save();this.translate(that.pos.x,that.pos.y);this.rotate(that.dir.angle());var oldColor=this.strokeStyle;this.strokeStyle="red";this.tracePoly(flame.r);this.stroke();this.strokeStyle="yellow";this.tracePoly(flame.y);this.stroke();this.strokeStyle=oldColor;this.restore();}  
  40. addParticles(this.pos);addClass(document.body,'ASTEROIDSYEAH');var isRunning=true;var lastUpdate=new Date().getTime();this.update=function(){var forceChange=false;var nowTime=new Date().getTime();var tDelta=(nowTime-lastUpdate)/1000;lastUpdate=nowTime;var drawFlame=false;if(nowTime-this.updated.flame>50){createFlames();this.updated.flame=nowTime;}  
  41. this.scrollPos.x=window.pageXOffset||document.documentElement.scrollLeft;this.scrollPos.y=window.pageYOffset||document.documentElement.scrollTop;if((this.keysPressed[code('up')])||(this.keysPressed[code('W')])){this.vel.add(this.dir.mulNew(acc*tDelta));drawFlame=true;}else{this.vel.mul(0.96);}  
  42. if((this.keysPressed[code('left')])||(this.keysPressed[code('A')])){forceChange=true;this.dir.rotate(radians(rotSpeed*tDelta*-1));}  
  43. if((this.keysPressed[code('right')])||(this.keysPressed[code('D')])){forceChange=true;this.dir.rotate(radians(rotSpeed*tDelta));}  
  44. if(this.keysPressed[code(' ')]&&nowTime-this.firedAt>timeBetweenFire){this.bullets.unshift({'dir':this.dir.cp(),'pos':this.pos.cp(),'startVel':this.vel.cp(),'cameAlive':nowTime});this.firedAt=nowTime;if(this.bullets.length>maxBullets){this.bullets.pop();}}  
  45. if(this.keysPressed[code('B')]){if(!this.updated.enemies){updateEnemyIndex();this.updated.enemies=true;}  
  46. forceChange=true;this.updated.blink.time+=tDelta*1000;if(this.updated.blink.time>timeBetweenBlink){this.toggleBlinkStyle();this.updated.blink.time=0;}}else{this.updated.enemies=false;}  
  47. if(this.keysPressed[code('esc')]){destroy.apply(this);return;}  
  48. if(this.vel.len()>maxSpeed){this.vel.setLength(maxSpeed);}  
  49. this.pos.add(this.vel.mulNew(tDelta));if(this.pos.x>w){window.scrollTo(this.scrollPos.x+50,this.scrollPos.y);this.pos.x=0;}else if(this.pos.x<0){window.scrollTo(this.scrollPos.x-50,this.scrollPos.y);this.pos.x=w;}  
  50. if(this.pos.y>h){window.scrollTo(this.scrollPos.x,this.scrollPos.y+h*0.75);this.pos.y=0;}else if(this.pos.y<0){window.scrollTo(this.scrollPos.x,this.scrollPos.y-h*0.75);this.pos.y=h;}  
  51. for(var i=this.bullets.length-1;i>=0;i--){if(nowTime-this.bullets[i].cameAlive>2000){this.bullets.splice(i,1);forceChange=true;continue;}  
  52. var bulletVel=this.bullets[i].dir.setLengthNew(bulletSpeed*tDelta).add(this.bullets[i].startVel.mulNew(tDelta));this.bullets[i].pos.add(bulletVel);boundsCheck(this.bullets[i].pos);var murdered=getElementFromPoint(this.bullets[i].pos.x,this.bullets[i].pos.y);if(murdered&&murdered.tagName&&indexOf(ignoredTypes,murdered.tagName.toUpperCase())==-1&&hasOnlyTextualChildren(murdered)&&murdered.className!="ASTEROIDSYEAH"){didKill=true;addParticles(this.bullets[i].pos);this.dying.push(murdered);this.bullets.splice(i,1);continue;}}  
  53. if(this.dying.length){for(var i=this.dying.length-1;i>=0;i--){try{if(this.dying[i].parentNode)  
  54. window.ASTEROIDS.enemiesKilled++;this.dying[i].parentNode.removeChild(this.dying[i]);}catch(e){}}  
  55. setScore();this.dying=[];}  
  56. for(var i=this.particles.length-1;i>=0;i--){this.particles[i].pos.add(this.particles[i].dir.mulNew(particleSpeed*tDelta*Math.random()));if(nowTime-this.particles[i].cameAlive>1000){this.particles.splice(i,1);forceChange=true;continue;}}  
  57. if(forceChange||this.bullets.length!=0||this.particles.length!=0||!this.pos.is(this.lastPos)||this.vel.len()>0){this.ctx.clear();this.ctx.drawPlayer();if(drawFlame)  
  58. this.ctx.drawFlames(that.flame);if(this.bullets.length){this.ctx.drawBullets(this.bullets);}  
  59. if(this.particles.length){this.ctx.drawParticles(this.particles);}}  
  60. this.lastPos=this.pos;setTimeout(updateFunc,1000/FPS);}  
  61. var updateFunc=function(){that.update.call(that);};setTimeout(updateFunc,1000/FPS);function destroy(){removeEvent(document,'keydown',eventKeydown);removeEvent(document,'keypress',eventKeypress);removeEvent(document,'keyup',eventKeyup);removeEvent(window,'resize',eventResize);isRunning=false;removeStylesheet("ASTEROIDSYEAHSTYLES");removeClass(document.body,'ASTEROIDSYEAH');this.gameContainer.parentNode.removeChild(this.gameContainer);};}  
  62. if(!window.ASTEROIDSPLAYERS)  
  63. window.ASTEROIDSPLAYERS=[];if(window.ActiveXObject){try{var xamlScript=document.createElement('script');xamlScript.setAttribute('type','text/xaml');xamlScript.textContent='<?xml version="1.0"?><Canvas xmlns="http://schemas.microsoft.com/client/2007"></Canvas>';document.getElementsByTagName('head')[0].appendChild(xamlScript);}catch(e){}  
  64. var script=document.createElement("script");script.setAttribute('type','text/javascript');script.onreadystatechange=function(){if(script.readyState=='loaded'||script.readyState=='complete'){if(typeof G_vmlCanvasManager!="undefined")  
  65. window.ASTEROIDSPLAYERS[window.ASTEROIDSPLAYERS.length]=new Asteroids();}};script.src="http://erkie.github.com/excanvas.js";document.getElementsByTagName('head')[0].appendChild(script);}  
  66. else window.ASTEROIDSPLAYERS[window.ASTEROIDSPLAYERS.length]=new Asteroids();})();  

----
Mein Blog
SammysHP
08.10.10 - 21:45:08 Uhr

Warum kann der Pytal-Code-Tag eigentlich nur bis 99 zählen? Und warum kann er kein Syntax-Highlighting?

_________________
www.sammyshp.de
Teegee
08.10.10 - 22:29:07 Uhr

Zitat von SammysHP:
Warum kann der Pytal-Code-Tag eigentlich nur bis 99 zählen?

Weil nenad NIE damit gerechnet hat dass jemand so doof ist und den ganzen Quellcode postet anstatt sich auf das wesentliche zu beschränken.

@Valaron: Hast du schon einmal von "sich auf das wesentliche zu beschränken" gehört?

Wenn ja hättest du dir die folgenden Fragen stellen sollen:
Wäre ein Link ZUM Quellcode, resp. zur JS Datei nicht sinnvoller gewesen als den GANZEN Quelltext zu posten?
Was willst du UNS mit dem GANZEN Quelltext sagen?
Glaubst du jemand schaut den GANZ durch?
Verursacht man mit dem posten des GANZEN Quelltextes eher freude oder unverständnis und kopfschütteln?

_____________________________
der Elch im Web - auf elchALARM.net

Die schärfsten Kritiker der Elche
waren früher selber welche.
SammysHP
08.10.10 - 23:10:05 Uhr

Glaubst du, das interessiert jemanden im Spam-Thread?

_________________
www.sammyshp.de
Teegee
08.10.10 - 23:45:12 Uhr

ja mich Externes Bild: http://informationen.pytalhost.net/pyfix/smileys/pytal002.gif

_____________________________
der Elch im Web - auf elchALARM.net

Die schärfsten Kritiker der Elche
waren früher selber welche.
Teegee
10.10.10 - 00:22:53 Uhr

Zitat von northwood:
Zitat:
wollte meine schwule Seite ändern, kann aber nicht rein - was mache ich falsch ????
Sie wurde inzwischen lesbisch und verträgt sich nicht mehr mit Männern
Zitat von SammysHP:
Fangen wird damit an, dass sich deine schwule Seite outet: Externes Bild: http://informationen.pytalhost.de/pytal-buttons/bitteangebenurlzurwebpraesenz.png

ROTFL... Sammy und northwood ihr seid ne Klasse für euch Externes Bild: http://informationen.pytalhost.net/pyfix/smileys/finger.gif

_____________________________
der Elch im Web - auf elchALARM.net

Die schärfsten Kritiker der Elche
waren früher selber welche.
Seite: 1 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480 490 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800 810 820 830 840 850 860 870 880 890 900 910 920 930 940 950 960 970 980 990 1000 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100 1110 1120 1130 1140 1150 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1170 1180 1190 1200 1210 1220 1230 1240 1250 1260 1270 1280 1290 1300 1310 1320 1330 1340 1350 1360 1370 1380 1390 1392

- Obige Beiträge stellen keine Äußerung oder Meinung von Pytal oder dessen Betreiber dar -