flash on 2011-6-17

by shaktool
♥0 | Line 135 | Modified 2011-06-17 05:09:35 | MIT License
play

ActionScript3 source code

/**
 * Copyright shaktool ( http://wonderfl.net/user/shaktool )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/e0hI
 */

package {
    import flash.display.Sprite;
    import flash.events.*;
    public class FlashTest extends Sprite {
        
        private var cameraAngle: Number;
        
        private var dudeX: Number;
        private var dudeY: Number;
        private var dudeVX: Number;
        private var dudeVY: Number;
        
        private var jumpHeld: Boolean;
        private var rightHeld: Boolean;
        private var platforms: Array = [];
        private var nextPlatform: Number;
        
        public function FlashTest() {
            cameraAngle = 0;
            dudeX = 200;
            dudeY = 200;
            dudeVX = 0;
            dudeVY = 0;
            jumpHeld = false;
            rightHeld = false;
            
            platforms.push( 100 );
            platforms.push( 400 );
            nextPlatform = 200;
            
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPressed);
            stage.addEventListener(KeyboardEvent.KEY_UP, onKeyReleased);
        }
        
        private function onKeyPressed(event: KeyboardEvent): void {
            if (event.keyCode == 39) {
                rightHeld = true;
            }
            if (event.keyCode == 38) {
                jumpHeld = true;
            }
        }
        
        private function onKeyReleased(event: KeyboardEvent): void {
            if (event.keyCode == 39) {
                rightHeld = false;
            }
            if (event.keyCode == 38) {
                jumpHeld = false;
            }
        }
        
        private function onEnterFrame(event: Event): void {
            var windowSize: Number = 470;
            var dt: Number = 1.0 / 30.0;
            var mouseInput: Number = (mouseY / windowSize) * 2 - 1;
            var cameraRange: Number = Math.PI / 4;
            
            var waterLevel: Number = windowSize / 2;
            var waterRange: Number = 50;
            var i: int;
            var platformX: Number;
            var platformWidth: Number = 50;
            var platformHeight: Number = 10;
            
            var surfaceInfluence: Number = 1 - Math.abs(waterLevel - dudeY) / waterRange;
            if (surfaceInfluence < 0) surfaceInfluence = 0;
            
            var dudeAngle: Number = 0;
            
            if (jumpHeld) {
                dudeVY -= (80 + dudeVY) * dt * 3;
            }
            
            if (dudeY < waterLevel) {
                dudeVY += 50 * dt;
                if (rightHeld) {
                    dudeVX += (50 - dudeVX) * dt;
                }
            } else {
                dudeVX -= dudeVX * dt;
                dudeVY -= dudeVY * dt;
                
                var speedInfluence: Number = 1 - Math.abs(dudeVX) / 10;
                if (speedInfluence < 0) speedInfluence = 0;
                dudeVY += 10 * dt * speedInfluence;
                
                var steepestPitch: Number = (Math.PI / 4);
                dudeAngle = -cameraAngle * (1 - surfaceInfluence) - (1 - surfaceInfluence) * steepestPitch * surfaceInfluence;
                
                if (rightHeld) {
                    dudeVX += 50 * dt * Math.cos(dudeAngle);
                    dudeVY += 50 * dt * Math.sin(dudeAngle);
                }
                
                if (dudeY > 450 && dudeVY > 0) dudeVY = 0;
            }
            
            for (i= 0; i < platforms.length; i++) {
                platformX = platforms[i];
                platformX -= dudeVX * dt;
                if (platformX < -platformWidth) {
                    platforms.splice(0,1);
                } else {
                    platforms[i] = platformX;
                }
            }
            
            nextPlatform -= dudeVX * dt;
            if (nextPlatform < 0) {
                platforms.push(windowSize + platformWidth);
                nextPlatform += 100 + 150 * Math.random();
            }
            
            dudeY += dudeVY * dt;
            
            var neutralCamera: Number = -surfaceInfluence * Math.PI / 6;
            var desiredCamera: Number;
            desiredCamera = neutralCamera * (1 - Math.abs(mouseInput)) + cameraRange * mouseInput;
            cameraAngle += (desiredCamera - cameraAngle) * 2 * dt;
            
            graphics.clear();
            graphics.lineStyle(1, 0x0000ff);
            graphics.moveTo(0, waterLevel);
            graphics.lineTo(470, waterLevel);
            graphics.lineStyle();
            
            graphics.beginFill(0xff0000);
            graphics.drawCircle(dudeX, dudeY, 5);
            graphics.endFill();
            
            
            for (i= 0; i < platforms.length; i++) {
                platformX = platforms[i];
                graphics.beginFill(0x000000);
                graphics.drawRect(platformX - platformWidth/2, waterLevel - platformHeight/2, platformWidth, platformHeight);
                graphics.endFill();
            }
            
            var cameraRadius: Number = 100;
            var cameraX: Number = dudeX - Math.cos(cameraAngle) * cameraRadius;
            var cameraY: Number = dudeY + Math.sin(cameraAngle) * cameraRadius;
            var coneRadius: Number = Math.PI / 8;
            graphics.lineStyle(1, 0x00ff00);
            graphics.moveTo(dudeX, dudeY);
            graphics.lineTo(cameraX, cameraY);
            graphics.lineStyle();
            
            graphics.beginFill(0);
            graphics.moveTo(0,0);
            graphics.lineTo(windowSize,0);
            graphics.lineTo(windowSize,windowSize);
            graphics.lineTo(0,windowSize);
            graphics.lineTo(0,0);
            graphics.moveTo(cameraX,cameraY);
            graphics.lineTo(cameraX + Math.cos(cameraAngle + coneRadius) * 1000, cameraY - Math.sin(cameraAngle + coneRadius) * 1000);
            graphics.lineTo(cameraX + Math.cos(cameraAngle - coneRadius) * 1000, cameraY - Math.sin(cameraAngle - coneRadius) * 1000);
            graphics.lineTo(cameraX,cameraY);
            graphics.endFill();
            
            /*
            graphics.lineStyle(1, 0xff0000);
            graphics.moveTo(dudeX, dudeY);
            graphics.lineTo(dudeX + Math.cos(dudeAngle) * cameraRadius, dudeY + Math.sin(dudeAngle) * cameraRadius);
            graphics.lineStyle();
            */
        }
    }
}

Forked