Forums

ForumsProgramming Forum

Game in the works

Posted Jul 17, '14 at 2:51am

Fortheseen

Fortheseen

12 posts

Hey all, I am somewhat new to programming and I have basic start of a video game. I have been working on Adobe Flash Professional CS6 using AS3 and I am still trying to figure some things out here. My main problem is at the moment is getting my animations to work with my button presses and I notice sometimes when I press those buttons they do not work at the moment they're pressed and I know it has something to do with the timers but if I remove the timers the animations over lap each other when buttons are pressed. Here is what I got so far with my code: By the way Jump, Run, & Slide have the exact same code expect for class and function name.

package Action {

import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;

public class Jump extends MovieClip {

private var stageRef:Stage;

public function Jump(stageRef:Stage, x:Number, y:Number) {
this.stageRef = stageRef;
this.x = 200;
this.y = 600;

addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
}

private function loop(e:Event) {
if (currentFrame == totalFrames)
removeSelf();
}

private function removeSelf() : void {
removeEventListener(Event.ENTER_FRAME, loop);

if (stageRef.contains(this))
stageRef.removeChild(this);
}

}

}

package Action {

import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;

public class Runner extends MovieClip {

private var ourChar:Start;

public function Runner() {
//create an object of our character from the Run class
ourChar = new Start(stage);

//add it to the display list
stage.addChild(ourChar);

//starting location of character
ourChar.x = stage.stageWidth / 8;
ourChar.y = stage.stageHeight / 1.15;
}
}

}

package Action {

import flash.display.MovieClip;
import flash.display.Stage;
import Input.KeyObject;
import flash.ui.Keyboard;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;

public class Start extends MovieClip {

private var stageRef:Stage;
private var key:KeyObject;
private var JumpTimer:Timer;
private var canJump:Boolean = false;
private var SlideTimer:Timer;
private var canSlide:Boolean = false;
private var RunTimer:Timer;
private var canRun:Boolean = false;
private var jump:Boolean = false;
private var gravity:Number = 10;
private var jumpPower:Number = 0;
private var isJumping:Boolean = false;
private var ground:Number = 600;

public function Start(stageRef:Stage) {
this.stageRef = stageRef;
key = new KeyObject(stageRef);

JumpTimer = new Timer(1000, 1);
JumpTimer.addEventListener(TimerEvent.TIMER, jumpTimerHandler, false, 0, true);

SlideTimer = new Timer(1000, 1);
SlideTimer.addEventListener(TimerEvent.TIMER, slideTimerHandler, false, 0, true);

RunTimer = new Timer(1000, 1);
RunTimer.addEventListener(TimerEvent.TIMER, runTimerHandler, false, 0, true);

addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
}

public function loop(e:Event) : void {
//key presses
if (key.isDown(Keyboard.UP) && !canJump && !canRun) {
if(!isJumping) {
Jumper();
}
} else if (key.isDown(Keyboard.DOWN) && !canSlide && !canRun) {
Slider();
} else {
Runnerz();
}
if(isJumping) {
this.y -= jumpPower;
jumpPower -= 2;
}

if(this.y + gravity < ground) {
this.y += gravity;
} else {
this.y = ground;
isJumping = false;
}
}

private function Jumper() : void {
if (!canJump) {
stageRef.addChild(new Jump(stageRef, x, y));
canRun = true;
canJump = true;
canSlide = true;
this.jumpPower = 30;
isJumping = true;
}
}

private function Slider() : void {
if (!canSlide) {
stageRef.addChild(new Slide(stageRef, x, y));
canSlide = true;
canRun = true;
canJump = true;
}
}

private function Runnerz() : void {
if (!canRun) {
stageRef.addChild(new Run(stageRef, x, y));
canRun = true;
}
RunTimer.start();
}

private function jumpTimerHandler(e:TimerEvent) : void {
canJump = false;
}

private function slideTimerHandler(e:TimerEvent) : void {
canSlide = false;
}

private function runTimerHandler(e:TimerEvent) : void {
canRun = false;
canSlide = false;
canJump = false;
}

}

}

I would gladly accept your help and thank you for looking over the code.


last edited Jul 18 2014 06:00 pm by Fortheseen
 

Posted Jul 17, '14 at 10:45am

weirdlike

weirdlike

659 posts

Moderator

Skimming through the code it looks like when you keypress, you addChild then as the clip is finished you removeChild.

IMO this will cause a lot of errors. Instead you can create a movieClip and have all the sequences of movieClips in frames and label the frames to reference the sequence. I would also make the keypress in a separate class using switch, which will be dedicated to booleans in the main document class, and from there check if the key is pressed.

I have made a few sample's of what I am describing. My most current example HERE on setting up flash. Also a sample of game play HERE

I suggest to skim through it and pick out what you want. I can put together a "simple" sample of the movieClip sequences I briefly suggested If you want.

 

Posted Jul 17, '14 at 11:08am

weirdlike

weirdlike

659 posts

Moderator

well I went ahead and made it. I kinda slapped it together so don't expect it to be perfect. I also put everything in the actions panel, but you should be able to easily pick out what you want.

LINK

 

Posted Jul 17, '14 at 11:25pm

Fortheseen

Fortheseen

12 posts

Hey, thanks for getting back to me. I have been trying to convert my work into action panels and I haven't really used them before. I looked over the work you did with the LINK and I wanted to ask how does the compiler know what the defined property for hero is? I didn't notice one when I looked through it.

 

Posted Jul 17, '14 at 11:41pm

weirdlike

weirdlike

659 posts

Moderator

I highly suggest continuing working with the classes as that is what I prefer most.

As you load the file you can see the "hero" on the screen. Take a look at the timeline and you will see the layer containing the hero. It might be a locked layer just click on the lock to allow changes on the layer then you can freely select the hero. At that point while the hero is selected click on properties and you will see that hero is the Instance name. (if you don't see the properties panel press Ctrl+F3)

Normally in classes you just do this

var hero:heroMC = new heroMC();
addChild(hero);

The instance name is hero while the AS linkage is heroMC but on the timeline you need to declare the instance name by typing into that box and there is no addChild as it already exists on the screen.

EDIT: double-click on the heroMC to open an internal timeline showing the sequences.


last edited Jul 17 2014 11:42 pm by weirdlike
 

Posted Jul 18, '14 at 12:13am

weirdlike

weirdlike

659 posts

Moderator

I may have misunderstood your question. Flash automatically generates the definition on export. With the clip on screen you can convert to symbol. Then the properties box will ask if you want to export for action script, if selected the base class definition is right below it. If you decide you want to create your own "hero" class then you will need to "extend movieClip".

http://i.imgur.com/F7KzeeU.jpg


last edited Jul 18 2014 12:17 am by weirdlike
 

Posted Jul 18, '14 at 3:35am

Fortheseen

Fortheseen

12 posts

I finally figured it out and thanks again for the help. Do you know how to make it when I press a button it automatically changes to the other animation? I seem to have a minor lag between animations with button presses. I have it set to 24 frames per second and I am using exactly that amount so I wasn't sure if that was it.


last edited Jul 18 2014 03:37 am by Fortheseen
 

Posted Jul 18, '14 at 11:38am

weirdlike

weirdlike

659 posts

Moderator

hmm.. well post what you have and I can look it over.

 

Posted Jul 18, '14 at 5:35pm

Fortheseen

Fortheseen

12 posts

This is what I have so far for my animations:

import flash.events.Event;

hero.gotoAndStop("running&quot;);


var upPressed:Boolean = false;
var downPressed:Boolean = false;

var gravity:Boolean = true;
var jumpTrue:Boolean = false;
var groundFix:Boolean = false;
var jumpHeight:Number = 0;

hero.addEventListener(Event.ENTER_FRAME, heroMove);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUnPressed);

function heroMove(event:Event) {
if (upPressed) {
if (jumpTrue) {
if (groundFix) {
jumpHeight = hero.y - 75;
groundFix = false;
hero.y -= 15;
} else {
hero.y -= 15;
if(hero.y

 

Posted Jul 18, '14 at 6:01pm

Fortheseen

Fortheseen

12 posts

[lesser than equal sign] jumpHeight) {
jumpTrue = false;
}
}
}
}
if (gravity) {
hero.y += 5;
}
}

function keyPressed(event:KeyboardEvent):void {
switch (event.keyCode) {
case Keyboard.UP: {
if (upPressed) {
hero.gotoAndStop("jumping&quot;);
}
upPressed = true;
break;
}
case Keyboard.DOWN: {
if (downPressed) {
hero.gotoAndStop("sliding&quot;);
} else {
hero.gotoAndStop("running&quot;);
}
downPressed = true;
break;
}
}
}

function keyUnPressed(event:KeyboardEvent):void {
switch (event.keyCode) {
case Keyboard.UP: {
if (downPressed) {
upPressed = false;
jumpTrue = false;
stop();
hero.gotoAndStop("jumping&quot;);
} else {
upPressed = false;
jumpTrue = false;
hero.gotoAndStop("running&quot;);
}
break;
}
case Keyboard.DOWN: {
if (upPressed) {
downPressed = false;
hero.gotoAndStop("sliding&quot;);
} else {
downPressed = false;
hero.gotoAndStop("running&quot;);
}
break;
}
}
}

Not sure why that didn't want to post.


last edited Jul 18 2014 06:08 pm by Fortheseen
 
Reply to Game in the works

You must be logged in to post a reply!