flash on 2011-6-17
♥0 |
Line 135 |
Modified 2011-06-17 05:09:35 |
MIT License
archived:2017-03-20 10:48:56
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();
*/
}
}
}