Code edit (2 edits merged)
Please save this source code
User prompt
Replace the Text2s used in the game instances with the BorderedText class instead
Code edit (20 edits merged)
Please save this source code
User prompt
Add 3 text displays to the game. They should be arranged vertically, positioned at the same location as the road instance and center aligned. The center display should be 1.5x larger than the others.
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
add a game.up event that calls the player's jumpEnd function
User prompt
add a global mouse down event that calls the player's jump start function
Code edit (1 edits merged)
Please save this source code
User prompt
add an empty "jump" function to the "Player" class
User prompt
Please fix the bug: 'TypeError: self is undefined' in or related to this line: 'self.jump = function () {' Line Number: 549
User prompt
add an empty jump function to the player class
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (3 edits merged)
Please save this source code
User prompt
in the sun's update method, instead of scaling every frame, scale every 30 ticks
Code edit (1 edits merged)
Please save this source code
User prompt
add a sun asset in the sun class after the circles for-loop, with an alpha of 0.5
User prompt
In the sun class, create 10 circle assets at the origin, each one 100 units larger than the last, with the first having a width and height of 500. They should be also tinted yellow and have an alpha of 0.05
User prompt
Please fix the bug: 'TypeError: self is undefined' in or related to this line: 'self.attachAsset('circle', {' Line Number: 455
User prompt
In the sun class, create 10 circle assets at the origin, each one 100 units larger than the last, with the first having a width and height of 500. They should be also tinted yellow and have an alpha of 0.05. Make sure to keep the sun asset
User prompt
add the sun asset back
User prompt
In the sun class, create 10 circle assets at the origin, each one 100 units larger than the last, with the first having a width and height of 500. They should be also tinted yellow and have an alpha of 0.05
/**** * Classes ****/ /** * config { * x : Number || 0, * y : Number || 0, * rotation : Number || 0, * } **/ var ConfigContainer = Container.expand(function (config) { var self = Container.call(this); config = config || {}; ; self.x = config.x || 0; self.y = config.y || 0; self.rotation = config.rotation || 0; if (config.scale !== undefined || config.scaleX !== undefined || config.scaleY !== undefined) { var scaleX = config.scaleX !== undefined ? config.scaleX : config.scale !== undefined ? config.scale : 1; var scaleY = config.scaleY !== undefined ? config.scaleY : config.scale !== undefined ? config.scale : 1; self.scale.set(scaleX, scaleY); } ; return self; }); var Sun = ConfigContainer.expand(function (config) { var self = ConfigContainer.call(this, config); for (var i = 0; i < 10; i++) { self.attachAsset('circle', { width: 500 + 200 * i, height: 500 + 200 * i, color: 0xFFFF00, alpha: 0.1, anchorX: 0.5, anchorY: 0.5 }); } var sunAsset = self.attachAsset('sun', { anchorX: 0.5075, anchorY: 0.5, alpha: 0.75 }); ; self.update = update; ; function update() { if (LK.ticks % 30 == 0) { sunAsset.scale.x *= -1; } } }); var RoadSegment = ConfigContainer.expand(function (config) { var self = ConfigContainer.call(this, config); var background = self.addChild(new Container()); self.attachAsset('roadSegment', { anchorX: 1, anchorY: 1 }); self.attachAsset('roadSegment', { anchorX: 1, anchorY: 1, scaleX: 0.95, scaleY: 0.95, tint: 0x555555 }); if (config.index % 3 === 0) { attachAssetRadial(self, 'square', { offset: 200, width: 100, height: 10, anchorR: 0.5, anchorX: 0.5, anchorY: 0.5 }); } ; self.update = update; self.regenerate = regenerate; self.fadeout = false; self.scaling = config.scale; self.stepHeight = self.scaling * ROAD_SEGMENT_HEIGHT; self.stepChance = config.stepChance; self.previous = config.previous; ; function attachAssetRadial(parent, asset, obj) { var offsetTotal = ROAD_SEGMENT_HEIGHT - (obj.offset || 10); var rotation = -(1 - obj.anchorR) * ROAD_SEGMENT_ANGLE; parent.attachAsset(asset, { x: Math.sin(rotation) * offsetTotal, y: Math.cos(rotation) * -offsetTotal, width: obj.width, height: obj.height, anchorX: obj.anchorX, anchorY: obj.anchorY, scaleX: obj.scaleX || 1, scaleY: obj.scaleY || 1, rotation: (obj.rotation || 0) + rotation }); } function generateBackground() { background.removeChildren(); var plantCount = Math.floor(Math.random() * (ROAD_GEN_PLANT_MAX + 1)); if (Math.random() < ROAD_GEN_TREE_CHANCE) { var treeIndex = Math.floor(Math.random() * ROAD_GEN_TREE_ASSETS); var scale = 0.9 + 0.2 * Math.random(); attachAssetRadial(background, 'tree' + treeIndex, { anchorR: 0.4 + 0.2 * Math.random(), anchorX: 0.5, anchorY: 1, scaleX: scale, scaleY: scale }); } for (var i = 0; i < plantCount; i++) { var plantIndex = Math.floor(Math.random() * ROAD_GEN_PLANT_ASSETS); var scale = 0.9 + 0.2 * Math.random(); attachAssetRadial(background, 'plant' + plantIndex, { anchorR: 0.1 + 0.8 * Math.random(), anchorX: 0.5, anchorY: 1, scaleX: Math.random() < 0.5 ? -scale : scale, scaleY: scale }); } if (Math.random() < ROAD_GEN_CLOUD_CHANCE) { var cloudIndex = Math.floor(Math.random() * ROAD_GEN_CLOUD_ASSETS); var scale = 1.0 + 1.5 * Math.random(); attachAssetRadial(background, 'cloud' + cloudIndex, { offset: -800, anchorR: -1.0 + 2.0 * Math.random(), anchorX: 0.5, anchorY: 0.5, scaleX: scale, scaleY: scale }); } } function regenerate() { var stepChance = self.previous.stepChance; var stepUp = self.previous.scaling < ROAD_SCALE_MAX ? Math.random() < self.stepChance : false; var stepDown = self.previous.scaling > ROAD_SCALE_MIN ? Math.random() < self.stepChance : false; if (stepUp || stepDown) { if (stepUp && stepDown) { if (Math.random() < 0.5) { stepDown = false; } else { stepUp = false; } } self.scaling = self.previous.scaling += ROAD_SCALE_STEP * (stepUp ? 1 : -1); self.stepChance = ROAD_STEP_CHANCE_BASE; } else { self.scaling = self.previous.scaling; self.stepChance = self.previous.stepChance + ROAD_STEP_CHANCE_INCREMENT; } generateBackground(); self.fadeout = false; self.scale.set(self.scaling); self.stepHeight = self.scaling * ROAD_SEGMENT_HEIGHT; } function update() { if (self.fadeout && self.alpha > 0) { if ((self.alpha -= ROAD_SEGMENT_FADEOUT) < 0) { self.alpha = 0; } } else if (!self.fadeout && self.alpha < 1) { if ((self.alpha += ROAD_SEGMENT_FADEOUT) > 1) { self.alpha = 1; } } } }); var Road = ConfigContainer.expand(function (config) { var self = ConfigContainer.call(this, config); var segments = []; for (var i = 0; i < ROAD_SEGMENT_COUNT; i++) { var segment = segments[i] = self.addChild(new RoadSegment({ index: i, previous: i > 0 ? segments[i - 1] : undefined, rotation: i * ROAD_SEGMENT_ANGLE, stepChance: ROAD_STEP_CHANCE_BASE, scale: ROAD_SCALE_BASE })); if (i === ROAD_SEGMENT_COUNT - 1) { segments[0].previous = segment; } if (i >= ROAD_FREE_RUN_COUNT) { segment.regenerate(); } } self.attachAsset('circle', { width: 500, height: 500, tint: 0x222222, anchorX: 0.5, anchorY: 0.5 }); self.attachAsset('circle', { width: 485, height: 485, tint: 0x87CEEB, anchorX: 0.5, anchorY: 0.5 }); var destroyIndex = -1; var regenerateIndex = -1; ; self.update = update; self.getIndex = getIndex; self.getNode = getNode; ; function update() { self.rotation -= PLAYER_ROTATIONAL_SPEED; var newDestroyIndex = getIndex(ROAD_SEGMENT_DESTROY); var newRegenerateIndex = getIndex(20); // TEMP if (newDestroyIndex >= 0 && newDestroyIndex !== destroyIndex && !segments[newDestroyIndex].fadeout) { destroyIndex = newDestroyIndex; segments[destroyIndex].fadeout = true; } if (newRegenerateIndex >= 0 && newRegenerateIndex !== regenerateIndex && segments[newRegenerateIndex].fadeout) { regenerateIndex = newRegenerateIndex; segments[regenerateIndex].regenerate(); } } function getIndex(shift) { return Math.floor(-self.rotation / MATH_2_PI * ROAD_SEGMENT_COUNT + (shift || 0) + 1) % ROAD_SEGMENT_COUNT; } function getNode(shift) { return segments[getIndex(shift)]; } }); var PlayerBody = ConfigContainer.expand(function (config) { var self = ConfigContainer.call(this, config); // Animation settings var animation = animationStand; var alpha = 0; var blendAnimation = undefined; var blendDecrement = 0; var blendAlpha = 0; // Body settings var bodyOffsetY = config.y || 0; var pelvisOffsetX = -10; var armUpperAngle = -3 * MATH_EIGHTH_PI; var armUpperOffsetX = 15; var armUpperOffsetY = 30; var armLowerAngle = -MATH_QUARTER_PI; var armLowerOffsetY = 90; var legUpperAngle = 3 * MATH_EIGHTH_PI; var legUpperOffsetX = 10; var legLowerOffsetY = 135; var footOffsetY = 100; // Create and attach body parts var armUpperRight = self.addChild(new ConfigContainer({ y: armUpperOffsetY })); var legUpperRight = self.addChild(new ConfigContainer({ x: pelvisOffsetX + legUpperOffsetX })); var torso = self.attachAsset('torso', { anchorX: 0.5 }); var head = self.attachAsset('head', { anchorX: 0.15, anchorY: 0.95 }); var pelvis = self.attachAsset('pelvis', { x: pelvisOffsetX, y: torso.height, anchorX: 0.5, anchorY: 0.2, tint: 0xAAAAAA }); var legUpperLeft = self.addChild(new ConfigContainer({ x: pelvisOffsetX - legUpperOffsetX })); var armUpperLeft = self.addChild(new ConfigContainer({ y: armUpperOffsetY })); // Arm extensions armUpperRight.attachAsset('upperArm', { rotation: armUpperAngle, anchorX: 0.85, anchorY: 0.25, tint: 0x777777 }); armUpperLeft.attachAsset('upperArm', { rotation: armUpperAngle, anchorX: 0.85, anchorY: 0.25 }); var armLowerRight = armUpperRight.attachAsset('lowerArm', { y: armLowerOffsetY, rotation: armLowerAngle, anchorX: 0.95, anchorY: 0.05, tint: 0x777777 }); var armLowerLeft = armUpperLeft.attachAsset('lowerArm', { y: armLowerOffsetY, rotation: armLowerAngle, anchorX: 0.95, anchorY: 0.05 }); // Leg extensions legUpperRight.attachAsset('upperLeg', { rotation: legUpperAngle, anchorY: 0.1, tint: 0x777777 }); legUpperLeft.attachAsset('upperLeg', { rotation: legUpperAngle, anchorY: 0.1 }); var legLowerRight = legUpperRight.attachAsset('lowerLeg', { y: legLowerOffsetY, anchorX: 0.65, tint: 0x777777 }); var legLowerLeft = legUpperLeft.attachAsset('lowerLeg', { y: legLowerOffsetY, anchorX: 0.65 }); var footRight = legLowerRight.attachAsset('foot', { y: footOffsetY, anchorX: 0.2, anchorY: 0.05, tint: 0x777777 }); var footLeft = legLowerLeft.attachAsset('foot', { y: footOffsetY, anchorX: 0.2, anchorY: 0.05 }); // Additional positioning armUpperLeft.x = -torso.width / 2 + armUpperOffsetX; armUpperRight.x = torso.width / 2 - armUpperOffsetX; legUpperLeft.y = torso.height + pelvis.height / 3; legUpperRight.y = torso.height + pelvis.height / 3; ; self.animate = animate; self.pushAnimation = pushAnimation; ; function animate(increment) { alpha = (alpha + increment) % 1; if (blendAlpha > 0) { if ((blendAlpha -= blendDecrement) <= 0) { blendAlpha = 0; blendAnimation = undefined; } } var pose = animation(alpha); var blendPose = blendAnimation && blendAnimation(alpha); self.y = animateProperty(pose, blendPose, blendAlpha, 'BODY_OFFSET', bodyOffsetY); head.rotation = animateProperty(pose, blendPose, blendAlpha, 'HEAD_ROTATION'); armUpperRight.rotation = animateProperty(pose, blendPose, blendAlpha, 'ARM_UPPER_RIGHT_ROTATION'); armUpperLeft.rotation = animateProperty(pose, blendPose, blendAlpha, 'ARM_UPPER_LEFT_ROTATION'); armLowerRight.rotation = animateProperty(pose, blendPose, blendAlpha, 'ARM_LOWER_RIGHT_ROTATION', armLowerAngle); armLowerLeft.rotation = animateProperty(pose, blendPose, blendAlpha, 'ARM_LOWER_LEFT_ROTATION', armLowerAngle); legUpperRight.rotation = animateProperty(pose, blendPose, blendAlpha, 'LEG_UPPER_RIGHT_ROTATION'); legUpperLeft.rotation = animateProperty(pose, blendPose, blendAlpha, 'LEG_UPPER_LEFT_ROTATION'); legLowerRight.rotation = animateProperty(pose, blendPose, blendAlpha, 'LEG_LOWER_RIGHT_ROTATION'); legLowerLeft.rotation = animateProperty(pose, blendPose, blendAlpha, 'LEG_LOWER_LEFT_ROTATION'); footRight.rotation = animateProperty(pose, blendPose, blendAlpha, 'FOOT_RIGHT_ROTATION'); footLeft.rotation = animateProperty(pose, blendPose, blendAlpha, 'FOOT_LEFT_ROTATION'); } function pushAnimation(newAnimation, newBlendDecrement) { blendDecrement = newBlendDecrement; if (newAnimation !== animation) { blendAnimation = animation; animation = newAnimation; blendAlpha = 1; } } ; animate(0); }); var Player = ConfigContainer.expand(function (config) { var self = ConfigContainer.call(this, config); var body = self.addChild(new PlayerBody({ y: -370 })); var baseY = config.y; ; self.update = update; ; function update() { var node = road.getNode(); body.animate(0.02); // self.y = baseY - node.stepHeight; // self.scale.set(0.5 * node.scaling); } ; body.pushAnimation(animationRun, PLAYER_POSE_TRANSITION); }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue color }); /**** * Game Code ****/ ; //============================================================================== // Global constants & settings //============================================================================== ; // Math constants / pre-calculations var MATH_2_PI = Math.PI * 2; var MATH_4_PI = Math.PI * 4; var MATH_HALF_PI = Math.PI / 2; var MATH_THIRD_PI = Math.PI / 3; var MATH_QUARTER_PI = Math.PI / 4; var MATH_FIFTH_PI = Math.PI / 5; var MATH_SIXTH_PI = Math.PI / 5; var MATH_EIGHTH_PI = Math.PI / 8; ; // Game Constants var GAME_TICKS = 60; var GAME_WIDTH = 2048; var GAME_HEIGHT = 2732; ; // Road Constants var ROAD_SEGMENT_COUNT = 30; var ROAD_SEGMENT_ANGLE = MATH_2_PI / ROAD_SEGMENT_COUNT; var ROAD_SEGMENT_HEIGHT = 1000; var ROAD_SEGMENT_DESTROY = -2; var ROAD_SEGMENT_FADEOUT = 0.015; var ROAD_FREE_RUN_COUNT = 5; var ROAD_SCALE_BASE = 0.7; var ROAD_SCALE_STEP = 0.1; var ROAD_SCALE_MAX = 1.0; var ROAD_SCALE_MIN = 0.4; var ROAD_STEP_CHANCE_BASE = 0.1; var ROAD_STEP_CHANCE_INCREMENT = 0.5; var ROAD_GEN_PLANT_ASSETS = 3; var ROAD_GEN_PLANT_MAX = 3; var ROAD_GEN_TREE_ASSETS = 4; var ROAD_GEN_TREE_CHANCE = 0.1; var ROAD_GEN_CLOUD_ASSETS = 4; var ROAD_GEN_CLOUD_CHANCE = 0.2; // Player Constants var PLAYER_ROTATIONAL_SPEED = MATH_2_PI / (GAME_TICKS * 10); // 10s to complete a revolution var PLAYER_POSE_TRANSITION = 0.1; // Game Instances var sun = game.addChild(new Sun({ x: GAME_WIDTH / 2, y: 50 })); var road = game.addChild(new Road({ x: GAME_WIDTH / 2, y: GAME_HEIGHT - GAME_WIDTH / 2 })); var player = game.addChild(new Player({ x: road.x, y: road.y, scale: 0.5 })); ; // Animations & handlers function animateProperty(animationPose, blendPose, blendAlpha, key, baseValue) { var animationPoseValue = (animationPose || {})[key] || 0; var blendPoseValue = (blendPose || {})[key] || 0; return (baseValue || 0) + animationPoseValue * (1 - blendAlpha) + blendPoseValue * blendAlpha; } function animationRun(alpha) { // Animation constants var armUpperAngle = MATH_FIFTH_PI; var armLowerAngle = -5 * MATH_EIGHTH_PI; var legLowerAngle = MATH_EIGHTH_PI; // Sinusoidals var rightSinusoidal = Math.cos(MATH_2_PI * (alpha + 0.5)); var leftSinusoidal = Math.cos(MATH_2_PI * alpha); var doubleSinusoidal = Math.cos(MATH_4_PI * alpha); // Animation calculations var armUpperRightSwing = -rightSinusoidal * MATH_QUARTER_PI; var armUpperLeftSwing = -leftSinusoidal * MATH_QUARTER_PI; var legUpperRightSwing = rightSinusoidal * MATH_THIRD_PI; var legUpperLeftSwing = leftSinusoidal * MATH_THIRD_PI; return { BODY_OFFSET: doubleSinusoidal * 10, HEAD_ROTATION: (1 + doubleSinusoidal) * Math.PI / 32, ARM_UPPER_RIGHT_ROTATION: armUpperAngle + armUpperRightSwing, ARM_UPPER_LEFT_ROTATION: armUpperAngle + armUpperLeftSwing, ARM_LOWER_RIGHT_ROTATION: armLowerAngle + armUpperRightSwing / 2, ARM_LOWER_LEFT_ROTATION: armLowerAngle + armUpperLeftSwing / 2, LEG_UPPER_RIGHT_ROTATION: legUpperRightSwing, LEG_UPPER_LEFT_ROTATION: legUpperLeftSwing, LEG_LOWER_RIGHT_ROTATION: legLowerAngle + (alpha > 0.5 ? MATH_THIRD_PI + (1 - Math.abs(rightSinusoidal)) * MATH_SIXTH_PI : Math.abs(-legUpperRightSwing)), LEG_LOWER_LEFT_ROTATION: legLowerAngle + (alpha <= 0.5 ? MATH_THIRD_PI + (1 - Math.abs(leftSinusoidal)) * MATH_SIXTH_PI : Math.abs(-legUpperLeftSwing)), FOOT_RIGHT_ROTATION: Math.max(0, legUpperRightSwing * 2 / 3) - legLowerAngle, FOOT_LEFT_ROTATION: Math.max(0, legUpperLeftSwing * 2 / 3) - legLowerAngle }; } function animationJump(alpha) { return {}; } function animationStand(alpha) { var leftSinusoidal = Math.cos(MATH_2_PI * alpha); return {}; }
===================================================================
--- original.js
+++ change.js
@@ -231,23 +231,23 @@
});
var PlayerBody = ConfigContainer.expand(function (config) {
var self = ConfigContainer.call(this, config);
// Animation settings
- var animation = animationRun;
+ var animation = animationStand;
var alpha = 0;
var blendAnimation = undefined;
var blendDecrement = 0;
var blendAlpha = 0;
// Body settings
var bodyOffsetY = config.y || 0;
- var pelvisOffsetX = -15;
+ var pelvisOffsetX = -10;
var armUpperAngle = -3 * MATH_EIGHTH_PI;
var armUpperOffsetX = 15;
var armUpperOffsetY = 30;
var armLowerAngle = -MATH_QUARTER_PI;
var armLowerOffsetY = 90;
var legUpperAngle = 3 * MATH_EIGHTH_PI;
- var legUpperOffsetX = 5;
+ var legUpperOffsetX = 10;
var legLowerOffsetY = 135;
var footOffsetY = 100;
// Create and attach body parts
var armUpperRight = self.addChild(new ConfigContainer({
@@ -292,9 +292,9 @@
y: armLowerOffsetY,
rotation: armLowerAngle,
anchorX: 0.95,
anchorY: 0.05,
- tint: config.tint || 0xFFFFFF
+ tint: 0x777777
});
var armLowerLeft = armUpperLeft.attachAsset('lowerArm', {
y: armLowerOffsetY,
rotation: armLowerAngle,
@@ -317,10 +317,9 @@
tint: 0x777777
});
var legLowerLeft = legUpperLeft.attachAsset('lowerLeg', {
y: legLowerOffsetY,
- anchorX: 0.65,
- tint: 0x777777
+ anchorX: 0.65
});
var footRight = legLowerRight.attachAsset('foot', {
y: footOffsetY,
anchorX: 0.2,
@@ -329,10 +328,9 @@
});
var footLeft = legLowerLeft.attachAsset('foot', {
y: footOffsetY,
anchorX: 0.2,
- anchorY: 0.05,
- tint: 0x777777
+ anchorY: 0.05
});
// Additional positioning
armUpperLeft.x = -torso.width / 2 + armUpperOffsetX;
armUpperRight.x = torso.width / 2 - armUpperOffsetX;
@@ -355,10 +353,10 @@
self.y = animateProperty(pose, blendPose, blendAlpha, 'BODY_OFFSET', bodyOffsetY);
head.rotation = animateProperty(pose, blendPose, blendAlpha, 'HEAD_ROTATION');
armUpperRight.rotation = animateProperty(pose, blendPose, blendAlpha, 'ARM_UPPER_RIGHT_ROTATION');
armUpperLeft.rotation = animateProperty(pose, blendPose, blendAlpha, 'ARM_UPPER_LEFT_ROTATION');
- armLowerRight.rotation = animateProperty(pose, blendPose, blendAlpha, 'ARM_LOWER_RIGHT_ROTATION');
- armLowerLeft.rotation = animateProperty(pose, blendPose, blendAlpha, 'ARM_LOWER_LEFT_ROTATION');
+ armLowerRight.rotation = animateProperty(pose, blendPose, blendAlpha, 'ARM_LOWER_RIGHT_ROTATION', armLowerAngle);
+ armLowerLeft.rotation = animateProperty(pose, blendPose, blendAlpha, 'ARM_LOWER_LEFT_ROTATION', armLowerAngle);
legUpperRight.rotation = animateProperty(pose, blendPose, blendAlpha, 'LEG_UPPER_RIGHT_ROTATION');
legUpperLeft.rotation = animateProperty(pose, blendPose, blendAlpha, 'LEG_UPPER_LEFT_ROTATION');
legLowerRight.rotation = animateProperty(pose, blendPose, blendAlpha, 'LEG_LOWER_RIGHT_ROTATION');
legLowerLeft.rotation = animateProperty(pose, blendPose, blendAlpha, 'LEG_LOWER_LEFT_ROTATION');
@@ -387,139 +385,14 @@
;
function update() {
var node = road.getNode();
body.animate(0.02);
- self.y = baseY - node.stepHeight;
+ // self.y = baseY - node.stepHeight;
// self.scale.set(0.5 * node.scaling);
}
-});
-var CharacterLeg = ConfigContainer.expand(function (config) {
- var self = ConfigContainer.call(this, config);
- // Leg settings
- var upperBaseAngle = Math.PI * 3 / 8;
- var lowerBaseOffset = 135;
- var lowerHoldAngle = Math.PI / 8;
- var footBaseOffset = 100;
- // Create and attach leg parts
- var upper = self.attachAsset('upperLeg', {
- rotation: upperBaseAngle,
- anchorY: 0.1,
- tint: config.tint || 0xFFFFFF
- });
- var lower = self.addChild(new ConfigContainer({
- y: lowerBaseOffset,
- tint: config.tint || 0xFFFFFF
- }));
- lower.attachAsset('lowerLeg', {
- anchorX: 0.65,
- tint: config.tint || 0xFFFFFF
- });
- var foot = lower.attachAsset('foot', {
- y: footBaseOffset,
- anchorX: 0.2,
- anchorY: 0.05,
- tint: config.tint || 0xFFFFFF
- });
;
- self.animate = animate;
- ;
- function animate(alpha) {
- var sinusoidal = Math.cos(alpha * Math.PI * 2);
- var upperSwing = sinusoidal * Math.PI / 3;
- self.rotation = upperSwing;
- lower.rotation = lowerHoldAngle + (alpha <= 0.5 ? Math.PI / 3 + (1 - Math.abs(sinusoidal)) * Math.PI / 6 : Math.abs(-upperSwing));
- foot.rotation = Math.max(0, upperSwing * 2 / 3) - lowerHoldAngle;
- }
+ body.pushAnimation(animationRun, PLAYER_POSE_TRANSITION);
});
-var CharacterBody = ConfigContainer.expand(function (config) {
- var self = ConfigContainer.call(this, config);
- // Body settings
- var baseY = config.y || 0;
- var armOffsetX = 15;
- var armOffsetY = 30;
- var pelvisOffsetX = -15;
- var legOffsetX = 5;
- // Create and attach body parts
- var armRight = self.addChild(new CharacterArm({
- y: armOffsetY,
- tint: 0x777777
- }));
- var legRight = self.addChild(new CharacterLeg({
- x: pelvisOffsetX + legOffsetX,
- tint: 0x777777
- }));
- var torso = self.attachAsset('torso', {
- anchorX: 0.5
- });
- var head = self.attachAsset('head', {
- anchorX: 0.15,
- anchorY: 0.95
- });
- var pelvis = self.attachAsset('pelvis', {
- x: pelvisOffsetX,
- y: torso.height,
- anchorX: 0.5,
- anchorY: 0.2,
- tint: 0xAAAAAA
- });
- var legLeft = self.addChild(new CharacterLeg({
- x: pelvisOffsetX - legOffsetX
- }));
- var armLeft = self.addChild(new CharacterArm({
- y: armOffsetY
- }));
- // Position body parts
- armLeft.x = -torso.width / 2 + armOffsetX;
- armRight.x = torso.width / 2 - armOffsetX;
- legLeft.y = torso.height + pelvis.height / 3;
- legRight.y = torso.height + pelvis.height / 3;
- ;
- self.runAlpha = 0;
- self.animate = animate;
- ;
- function animate() {
- this.runAlpha += 0.02;
- var sinusoidal = Math.cos(this.runAlpha * Math.PI * 4);
- armLeft.animate(this.runAlpha % 1);
- armRight.animate((this.runAlpha - 0.5) % 1);
- legLeft.animate(this.runAlpha % 1);
- legRight.animate((this.runAlpha - 0.5) % 1);
- self.y = baseY + sinusoidal * 10;
- head.rotation = (1 + sinusoidal) * Math.PI / 32;
- }
-});
-var CharacterArm = ConfigContainer.expand(function (config) {
- var self = ConfigContainer.call(this, config);
- // Arm settings
- var upperBaseAngle = -Math.PI * 3 / 8;
- var upperOffsetAngle = Math.PI / 5;
- var lowerBaseAngle = -Math.PI / 4;
- var lowerHoldAngle = -Math.PI * 5 / 8;
- var lowerBaseOffset = 90;
- // Create and attach arm parts
- var upper = self.attachAsset('upperArm', {
- rotation: upperBaseAngle,
- anchorX: 0.85,
- anchorY: 0.25,
- tint: config.tint || 0xFFFFFF
- });
- var lower = self.attachAsset('lowerArm', {
- y: lowerBaseOffset,
- rotation: lowerBaseAngle + lowerHoldAngle,
- anchorX: 0.95,
- anchorY: 0.05,
- tint: config.tint || 0xFFFFFF
- });
- ;
- self.animate = animate;
- ;
- function animate(alpha) {
- var upperSwing = Math.cos(alpha * Math.PI * 2) * Math.PI / 4; // Swing between -45 and 45 degrees
- var lowerSwing = -upperSwing / 2;
- self.rotation = -upperSwing + upperOffsetAngle;
- lower.rotation = lowerBaseAngle + lowerHoldAngle + lowerSwing;
- }
-});
/****
* Initialize Game
****/
@@ -570,9 +443,9 @@
var ROAD_GEN_CLOUD_ASSETS = 4;
var ROAD_GEN_CLOUD_CHANCE = 0.2;
// Player Constants
var PLAYER_ROTATIONAL_SPEED = MATH_2_PI / (GAME_TICKS * 10); // 10s to complete a revolution
-;
+var PLAYER_POSE_TRANSITION = 0.1;
// Game Instances
var sun = game.addChild(new Sun({
x: GAME_WIDTH / 2,
y: 50
@@ -598,11 +471,11 @@
var armUpperAngle = MATH_FIFTH_PI;
var armLowerAngle = -5 * MATH_EIGHTH_PI;
var legLowerAngle = MATH_EIGHTH_PI;
// Sinusoidals
- var doubleSinusoidal = Math.sin(MATH_4_PI * alpha);
- var rightSinusoidal = Math.sin(MATH_2_PI * alpha);
- var leftSinusoidal = Math.sin(MATH_2_PI * (alpha + 0.5));
+ var rightSinusoidal = Math.cos(MATH_2_PI * (alpha + 0.5));
+ var leftSinusoidal = Math.cos(MATH_2_PI * alpha);
+ var doubleSinusoidal = Math.cos(MATH_4_PI * alpha);
// Animation calculations
var armUpperRightSwing = -rightSinusoidal * MATH_QUARTER_PI;
var armUpperLeftSwing = -leftSinusoidal * MATH_QUARTER_PI;
var legUpperRightSwing = rightSinusoidal * MATH_THIRD_PI;
@@ -625,6 +498,7 @@
function animationJump(alpha) {
return {};
}
function animationStand(alpha) {
+ var leftSinusoidal = Math.cos(MATH_2_PI * alpha);
return {};
}
\ No newline at end of file
white
white
circle sliced into many pieces, flat image. 2d, white background, shadowless.
pixel art of a tall, tree. game asset, 2d, white background, shadowless.
Pixel art street lamp. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art cloud. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art sun. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.