Olas ! estamos quase terminando o jogo dos cabecudinhos, episodio I o ataque dos mosquitos ! as partes graficas estao saindo do forno, valeu Mariana !! as coisas estao se encaixando, e em breve vai rolar o envio de pontuacao para o servidor.
Coisas novas bem legais estao neste preview :
feedback do tempo para a criacao do novo mosquito e tempo que o item vai ficar sem gerar mosquito
efeito quando os personagens sao atingidos pelo mosquito
Opa Opa ! grande passo no jogo dos cabeçudinhos ! agora estão os dois na tela, e com movimentos independentes, um pequeno passo para os cabeçudos um grande passo para a vaca vitoria !! huauhahuahu
E alguns fragmentos do codigo
esta eh a Scene em que usei a GravityManager
public class GameScene extends Scene, Updatable{
...
public var gravityManager: GravityManager;
// set the need info for the Scene work
public function setup(){
gameSoundtrack.play();
background =
lookup(BACKGROUND_ID) as NodeFromFXZ;
player1 =
lookup(PLAYER1_ID) as MovableChar;
player1.background = background;
player1.requestFocus();
gravityManager = GravityManager{
gravity: 5
content: [
GNode{
node: bind player1
}
]
}
}
public override function update(){
gravityManager.update();
}
override var content = [
NodeFromFXZ{
id: bind BACKGROUND_ID
source: "{__DIR__}media/background.fxz"
}
MovableChar{
id : bind PLAYER1_ID
source: "{__DIR__}media/boy.fxz"
x: 50
y: 450
speed: 3
colision: ["casa1", "casa2", "casa3","casa4", "casa5", "casa6", "casa7", "casa8",
"caixa1", "caixa2", "caixa3","caixa4", "caixa5", "caixa6",
"caixa7", "caixa7b", "caixa8", "caixa8b",
"left", "right", "bottom","top", "plataforma1"]
onMouseClicked: function(e){
}
onKeyReleasedDelegate: function(current:MovableChar, key: KeyCode){
if( key == KeyCode.VK_SPACE and current.hasColision){
fire.play();
gravityManager.addForce( current.id, Force {
y: -22;
});
}
}
onUpdate: function(current:MovableChar){
current.checkIfScrollBackground();
}
}
]
}
Segue o codigo das classes para o controle da gravidade
GravityManager
public class GravityManager extends Updatable{
public var gravity: Integer;
public var content: GNode[];
public function addForce(id:String, force: Force){
for( gNode in content){
if( gNode.node.id.equals(id) ) {
insert force into gNode.forces;
}
}
}
public override function update(){
// iterate over all gnodes
for( gNode in content){
var x: Integer = 0;
var y: Integer = gravity;
// iterate over all Force from the GNode
for( force in gNode.forces){
x = x + force.x as Integer;
y = y + force.y as Integer;
force.applyGravity(gravity);
if( force.isDisposable()){
delete force from gNode.forces;
}
}
// try to move the Node with the increase of x and y
gNode.node.moveX(x);
gNode.node.moveY(y);
}
}
}
Force.fx
public class Force {
public var x: Number;
public var y: Number;
public var percentGravity: Number = 0.15;
// reduce the x and y value with the gravity
public function applyGravity(gravity:Integer){
if( x < 0 ){
x = x + (gravity * percentGravity);
if( x > 0 ){
x = 0;
}
}
if( y < 0 ){
y = y + (gravity * percentGravity);
if( y > 0 ){
y = 0;
}
}
}
public function isDisposable():Boolean{
return x == 0 and y == 0;
}
}
GNode
public class GNode {
public var node: MovableChar;
public var forces: Force[];
}