Um snippet de código para fazer com que um movieclip siga outro.
No exemplo abaixo, a instância mc2 é perseguida por mc1.
Pode ser bastante útil em joguinhos :)
mc1.x = mc1.y = 100; // posição inicial de mc1
mc2.x = mc2.y = 500; // posição inicial de mc2
stage.addEventListener (Event.ENTER_FRAME,SigaMe);
function SigaMe(evt:Event): void {
mc1.x += Speed (mc1.x, mc2.x,100);
mc1.y += Speed (mc1.y, mc2.y,100);
}
function Speed (orig:Number, dest:Number,coef:Number):
Number {
return (dest-orig)/coef;
}
Mostrando postagens com marcador game. Mostrar todas as postagens
Mostrando postagens com marcador game. Mostrar todas as postagens
quinta-feira, 15 de maio de 2014
terça-feira, 6 de maio de 2014
Memorial descritivo de elaboração de game
A ideia básica é documentar o processo de desenvolvimento de um game!
Alguns itens básicos que não podem faltar!
- Resumo do tema ou enredo: Do que trata o jogo? Incluir aqui também gênero e público-alvo do game
- Lista de locações/ambientes (níveis): Lista detalhada do que eles contêm (sem spoiler)
- Elenco de personagens, inclusive os controlados pelo jogador e pelo computador, o que eles fazem, como se comportam, sua aparência.
- Arte Conceitual, Rascunhos de mapas, personagens, logotipo e demais elementos visuais do game.
- Trilha sonora: Creditar autor(es), nome e site.
quarta-feira, 30 de abril de 2014
Protótipo de Adventure Game
Muito legal o sistema de colisão codado pelo Mike Chambers!
Em cima dele dá pra montar um game estilo Adventure!!
// MAZE GAME ENGINE
// Mod of Mike Chambers code
// www.mikechambers.com/blog/2009/06/24/using-bitmapdata-hittest-for-collision-detection/
stop();
var colide:Boolean = false;
stage.focus = stage;
// POSICAO INICIAL JOGADOR
player.x = 130;
player.y = 70;
// MAPEIA COLISOES MAPA
function game(){
var playerRect:Rectangle = player.getBounds(this);
var playerOffset:Matrix = player.transform.matrix;
playerOffset.tx = player.x - playerRect.x;
playerOffset.ty = player.y - playerRect.y;
var playerBmpData = new BitmapData(playerRect.width, playerRect.height, true, 0);
playerBmpData.draw(player, playerOffset);
var mazeRect:Rectangle = maze.getBounds(this);
var mazeBmpData = new BitmapData(mazeRect.width, mazeRect.height, true, 0);
var mazeOffset:Matrix = maze.transform.matrix;
mazeOffset.tx = maze.x - mazeRect.x;
mazeOffset.ty = maze.y - mazeRect.y;
mazeBmpData.draw(maze, mazeOffset);
var rLoc:Point = new Point(mazeRect.x, mazeRect.y);
var bLoc:Point = new Point(playerRect.x, playerRect.y);
// COLISAO
if(mazeBmpData.hitTest(rLoc, 255, playerBmpData, bLoc, 255)) {
colide = true;
}
else {
colide = false;
}
playerBmpData.dispose();
mazeBmpData.dispose();
}
// MOVIMENTAÇÃO
var upPressed:Boolean = false;
var downPressed:Boolean = false;
var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
player.addEventListener(Event.ENTER_FRAME, Iniciar);
stage.addEventListener(KeyboardEvent.KEY_DOWN, SetKeyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, UnsetKeyPressed);
function Iniciar (event:Event){
// FILTROS
maze.filters = [new BevelFilter()];
chave.filters = [new DropShadowFilter()];
coin.filters = [new DropShadowFilter()];
//player.filters = [new DropShadowFilter()];
// COLISOES NPC
// CHAVE
if (player.hitTestObject(chave)){
trace ("PEGOU A CHAVE!!!");
chave.gotoAndStop(2);
}
// MOEDA
if (player.hitTestObject(coin)){
trace ("PEGOU A MOEDA!!");
coin.gotoAndStop(2);
}
// ENEMY
function game_over(){
stage.removeEventListener(Event.ENTER_FRAME, Iniciar);
player.removeEventListener(Event.ENTER_FRAME, Iniciar);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, SetKeyPressed);
stage.removeEventListener(KeyboardEvent.KEY_UP, UnsetKeyPressed);
nextScene();
}
if (player.hitTestObject(enemy_mc)){
trace ("YOU DIE");
game_over();
}
// PORTAL 01
if (player.hitTestObject(portal)){
trace ("MUDANDO DE SALA!");
portal.gotoAndStop(2); // play sound
gotoAndStop(2);
player.x = 68; // POSICAO NOVA JOGADOR
player.y = 535;
}
// SETA PRA CIMA
if (upPressed) {
player.y -= 5;
game();
if (colide){
player.y += 10;
}
}
// SETA PRA BAIXO
if (downPressed) {
player.y += 5;
game();
if (colide){
player.y -= 10;
}
}
// SETA ESQUERDA
if (leftPressed) {
player.x -= 5;
game();
if (colide){
player.x += 10;
}
}
// SETA DIREITA
if (rightPressed) {
player.x += 5;
game();
if (colide){
player.x -= 10;
}
}
}
function SetKeyPressed(event:KeyboardEvent):void{
switch (event.keyCode) {
case Keyboard.UP: {
upPressed = true;
break; }
case Keyboard.DOWN: {
downPressed = true;
break; }
case Keyboard.LEFT: {
leftPressed = true;
break; }
case Keyboard.RIGHT: {
rightPressed = true;
break; }
}
}
function UnsetKeyPressed(event:KeyboardEvent):void{
switch (event.keyCode) {
case Keyboard.UP: {
upPressed = false;
break; }
case Keyboard.DOWN: {
downPressed = false;
break; }
case Keyboard.LEFT: {
leftPressed = false;
break; }
case Keyboard.RIGHT: {
rightPressed = false;
break; }
}
}
Em cima dele dá pra montar um game estilo Adventure!!
// MAZE GAME ENGINE
// Mod of Mike Chambers code
// www.mikechambers.com/blog/2009/06/24/using-bitmapdata-hittest-for-collision-detection/
stop();
var colide:Boolean = false;
stage.focus = stage;
// POSICAO INICIAL JOGADOR
player.x = 130;
player.y = 70;
// MAPEIA COLISOES MAPA
function game(){
var playerRect:Rectangle = player.getBounds(this);
var playerOffset:Matrix = player.transform.matrix;
playerOffset.tx = player.x - playerRect.x;
playerOffset.ty = player.y - playerRect.y;
var playerBmpData = new BitmapData(playerRect.width, playerRect.height, true, 0);
playerBmpData.draw(player, playerOffset);
var mazeRect:Rectangle = maze.getBounds(this);
var mazeBmpData = new BitmapData(mazeRect.width, mazeRect.height, true, 0);
var mazeOffset:Matrix = maze.transform.matrix;
mazeOffset.tx = maze.x - mazeRect.x;
mazeOffset.ty = maze.y - mazeRect.y;
mazeBmpData.draw(maze, mazeOffset);
var rLoc:Point = new Point(mazeRect.x, mazeRect.y);
var bLoc:Point = new Point(playerRect.x, playerRect.y);
// COLISAO
if(mazeBmpData.hitTest(rLoc, 255, playerBmpData, bLoc, 255)) {
colide = true;
}
else {
colide = false;
}
playerBmpData.dispose();
mazeBmpData.dispose();
}
// MOVIMENTAÇÃO
var upPressed:Boolean = false;
var downPressed:Boolean = false;
var leftPressed:Boolean = false;
var rightPressed:Boolean = false;
player.addEventListener(Event.ENTER_FRAME, Iniciar);
stage.addEventListener(KeyboardEvent.KEY_DOWN, SetKeyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, UnsetKeyPressed);
function Iniciar (event:Event){
// FILTROS
maze.filters = [new BevelFilter()];
chave.filters = [new DropShadowFilter()];
coin.filters = [new DropShadowFilter()];
//player.filters = [new DropShadowFilter()];
// COLISOES NPC
// CHAVE
if (player.hitTestObject(chave)){
trace ("PEGOU A CHAVE!!!");
chave.gotoAndStop(2);
}
// MOEDA
if (player.hitTestObject(coin)){
trace ("PEGOU A MOEDA!!");
coin.gotoAndStop(2);
}
// ENEMY
function game_over(){
stage.removeEventListener(Event.ENTER_FRAME, Iniciar);
player.removeEventListener(Event.ENTER_FRAME, Iniciar);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, SetKeyPressed);
stage.removeEventListener(KeyboardEvent.KEY_UP, UnsetKeyPressed);
nextScene();
}
if (player.hitTestObject(enemy_mc)){
trace ("YOU DIE");
game_over();
}
// PORTAL 01
if (player.hitTestObject(portal)){
trace ("MUDANDO DE SALA!");
portal.gotoAndStop(2); // play sound
gotoAndStop(2);
player.x = 68; // POSICAO NOVA JOGADOR
player.y = 535;
}
// SETA PRA CIMA
if (upPressed) {
player.y -= 5;
game();
if (colide){
player.y += 10;
}
}
// SETA PRA BAIXO
if (downPressed) {
player.y += 5;
game();
if (colide){
player.y -= 10;
}
}
// SETA ESQUERDA
if (leftPressed) {
player.x -= 5;
game();
if (colide){
player.x += 10;
}
}
// SETA DIREITA
if (rightPressed) {
player.x += 5;
game();
if (colide){
player.x -= 10;
}
}
}
function SetKeyPressed(event:KeyboardEvent):void{
switch (event.keyCode) {
case Keyboard.UP: {
upPressed = true;
break; }
case Keyboard.DOWN: {
downPressed = true;
break; }
case Keyboard.LEFT: {
leftPressed = true;
break; }
case Keyboard.RIGHT: {
rightPressed = true;
break; }
}
}
function UnsetKeyPressed(event:KeyboardEvent):void{
switch (event.keyCode) {
case Keyboard.UP: {
upPressed = false;
break; }
case Keyboard.DOWN: {
downPressed = false;
break; }
case Keyboard.LEFT: {
leftPressed = false;
break; }
case Keyboard.RIGHT: {
rightPressed = false;
break; }
}
}
segunda-feira, 28 de outubro de 2013
Quiz Game Jquery Mobile
Projeto de Quiz Game usando a interface do Jquery Mobile!
Todas as questões em uma única página! Bem leve!
A função abaixo é a engine do jogo :)
// Detecta questão correta
$("#alt1").click(function() {
pontos = pontos +1;
alert("Acertou! Sua pontuação é " + pontos);
// Saída (cria conteudo da div)
var div = document.getElementById("placar");
div.textContent = "Você está com " + pontos + " pontos.";
var text = div.textContent;
})
Todas as questões em uma única página! Bem leve!
A função abaixo é a engine do jogo :)
// Detecta questão correta
$("#alt1").click(function() {
pontos = pontos +1;
alert("Acertou! Sua pontuação é " + pontos);
// Saída (cria conteudo da div)
var div = document.getElementById("placar");
div.textContent = "Você está com " + pontos + " pontos.";
var text = div.textContent;
})
segunda-feira, 13 de maio de 2013
Jogo de dados
// JOGO DE DADOS
import flash.events.MouseEvent;
import flash.text.TextField;
// VARIAVEIS
var aposta:String = "Você apostou no número " + txt_num.text + "!";
var erro:String = "O valor escolhido não é válido";
var certo:String = "Parabéns! Você acertou!";
var errado:String = "Você errou! Tente novamente!";
var chave:Boolean = true; // controla validação de campo
var dado:int = Math.floor(Math.random () * 6) + 1; // número randômico
var resultado_dado:TextField = new TextField();
resultado_dado.text = String(dado);
// CURSOR HAND EM BOTOES
bot_ok.buttonMode = true;
bot_voltar.buttonMode = true;
// APOSTAR
bot_ok.addEventListener (MouseEvent.CLICK, apostar);
function apostar (e:MouseEvent):void {
// VALIDAR CAMPO
if (txt_num.text < "1" || txt_num.text > "6") {
gotoAndStop (3);
txt_saida.text = erro;
chave = false;
}
// EXIBE APOSTA
else if (chave) {
trace ("O dado caiu no número " + dado);
if (txt_num.text == resultado_dado.text) {
gotoAndStop (3);
txt_saida.text = certo;
}
else {
gotoAndStop (3);
txt_saida.text = errado;
}
}
// VOLTAR
bot_voltar.addEventListener (MouseEvent.CLICK, voltar);
function voltar (evt:MouseEvent):void {
gotoAndStop (2);
}
}
segunda-feira, 1 de agosto de 2011
Jogo de dados
Protótipo de jogo de dados feito com quatro procedimentos (dado, chave1, chave2 e joga)! Pode ser adaptado para várias funções, como um joguinho caça-níqueis, por exemplo! Agora só falta trabalhar o design da interface gráfica rs!!!!
;
; JOGO DE DADOS
;
;use este primeiro procedimento para iniciar o jogo
aprenda dado
dt
rjc
; sorteia um número random de 1 a 6:
atr "y sortel [1 2 3 4 5 6]
; customiza saída para erros:
atr "trataerro [esc []]
; cria caixa de questão e atribui variável "x" pra ela:
atr "x pri caixadequestão [Faça sua aposta!][Pense em um número de 1 a 6 e jogue o dado!]
; confere se entrada digitada é número
se énúmero :x [chave1] [esc [Favor digitar apenas números!]esc [Tente novamente!] pare]
fim
aprenda chave1
; confere se entrada digitada é menor que 1
se :x < 1 [esc [Este não é um número válido!] esc [Tente novamente!] pare] [chave2]
fim
aprenda chave2
; confere se entrada digitada é maior que 6
se :x > 6 [esc [Este não é um número válido!] esc [Tente novamente!] pare] [joga]
fim
aprenda joga
rjc
;joga o dado
esc [O dado foi lançado e você apostou em:]
espere 60
esc :x
espere 60
esc []
esc [O dado parou e o número é:]
espere 60
esc :y
espere 100
esc []
; confere resultado
se :x = :y [esc [Parabéns! Você acertou!]] [esc [Você errou!]]
atr "z caixasimnão [Fim do jogo] [Gostaria de jogar novamente?]
se :z = "verd [dado][pare]
fim
;
; JOGO DE DADOS
;
;use este primeiro procedimento para iniciar o jogo
aprenda dado
dt
rjc
; sorteia um número random de 1 a 6:
atr "y sortel [1 2 3 4 5 6]
; customiza saída para erros:
atr "trataerro [esc []]
; cria caixa de questão e atribui variável "x" pra ela:
atr "x pri caixadequestão [Faça sua aposta!][Pense em um número de 1 a 6 e jogue o dado!]
; confere se entrada digitada é número
se énúmero :x [chave1] [esc [Favor digitar apenas números!]esc [Tente novamente!] pare]
fim
aprenda chave1
; confere se entrada digitada é menor que 1
se :x < 1 [esc [Este não é um número válido!] esc [Tente novamente!] pare] [chave2]
fim
aprenda chave2
; confere se entrada digitada é maior que 6
se :x > 6 [esc [Este não é um número válido!] esc [Tente novamente!] pare] [joga]
fim
aprenda joga
rjc
;joga o dado
esc [O dado foi lançado e você apostou em:]
espere 60
esc :x
espere 60
esc []
esc [O dado parou e o número é:]
espere 60
esc :y
espere 100
esc []
; confere resultado
se :x = :y [esc [Parabéns! Você acertou!]] [esc [Você errou!]]
atr "z caixasimnão [Fim do jogo] [Gostaria de jogar novamente?]
se :z = "verd [dado][pare]
fim
terça-feira, 5 de julho de 2011
Colisão
Tava quebrando a cabeça tentando fazer colisão no logo, e dando uma funçada no help achei as funções coorx e coory, que, como os nomes, sugerem, te dão a posição da tartaruga no eixo x e y respectivamente. Aí ficou mais fácil, bastanto definir uma área limite e usar as condicionais "se"!
Segue aqui o código para colisão no betalogo:
aprenda coli
se coorx > 100 [pt 10 pd sortnum 90 pf 1][pf 1]
se coorx < -100 [pt 10 pd sortnum 90 pf 1][pf 1]
se coory > 100 [pt 10 pd sortnum 90 pf 1][pf 1]
se coory < -100 [pt 10 pd sortnum 90 pf 1][pf 1]
coli
fim
Segue aqui o código para colisão no betalogo:
aprenda coli
se coorx > 100 [pt 10 pd sortnum 90 pf 1][pf 1]
se coorx < -100 [pt 10 pd sortnum 90 pf 1][pf 1]
se coory > 100 [pt 10 pd sortnum 90 pf 1][pf 1]
se coory < -100 [pt 10 pd sortnum 90 pf 1][pf 1]
coli
fim
Assinar:
Postagens (Atom)


