Skip to main content
Participant
October 8, 2018
Answered

Jogo De relógios com Angulos

  • October 8, 2018
  • 1 reply
  • 965 views

Boa tarde a todos, estou com dificuldade de fazer um jogo de relógio com a visualização dos ângulos.

Na verdade funciona o seguinte, o relógio tem os ponteiro que quando eu aumento e diminuo eles aparecem o ângulo entre os ponteiros.

CÓDIGO:

const TO_DEGREE:Number = 180/Math.PI;

//Pode Apagar (Apenas Teste):

trace(TO_DEGREE)

const TO_DEGREE2:Number = 180/Math.PI;

var teste1:Number = 0;

var teste2:Number = 0;

var i:Number = 0;

var grau:Number;

var drot;

var drot2;

var contador:Number = 0;

var rot:Number;

var rot2:Number;

var segundos:Number = 0;

var minutos:Number = 0;

var horas:Number = 0;

var size:uint = 100;

var roundObject:Shape = new Shape();

/*

Pode Apagar:

var teste3:Number = */

/*

Pode Apagar:

1*/

addEventListener(MouseEvent.MOUSE_DOWN, startRotate, true);

addEventListener(MouseEvent.MOUSE_UP, stopRotate, true);

/*

Pode Apagar:

2*/

addEventListener(MouseEvent.MOUSE_DOWN, startRotate2, true);

addEventListener(MouseEvent.MOUSE_UP, stopRotate2, true);

var maxRotSpeed:Number = .1;

var rotScale:Number = 0.2;

function startRotate(e:MouseEvent):void

{

    // Ocorrer o cálculo ocorra sempre que o mouse se move,

    // não apenas quando o botão do mouse é clicado

myMc.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);

}

function startRotate2(e:MouseEvent):void

{

    // Ocorrer o cálculo ocorra sempre que o mouse se move,

    // não apenas quando o botão do mouse é clicado

myMc2.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove2);

}

this.addChild(roundObject);

function onMouseMove(e:MouseEvent):void {

    var dx:int = stage.mouseX - myMc.x;

    var dy:int = stage.mouseY - myMc.y;

    rot = Math.atan2(dy, dx) * TO_DEGREE2;

trace("Seta Pequena: "+Math.abs(Math.floor(rot)))

Mminutos();

teste1 = Math.floor(rot);

    drot = rot - myMc.rotation;

grau = teste1-teste2;

trace("Grau: "+Math.abs(grau));

angulo.text = String(Math.abs(grau));

/*if (myMc.rotation >= -90 && myMc.rotation < 0)

{

trace('teste1');

trace('teste2');

g2.visible =false;

g1.visible = true;

t1.visible = true;

t2.visible = false;

g1.rotation +=drot;

}

else if (myMc.rotation < -90 && myMc.rotation >= -180)

{

trace('teste2');

g1.rotation +=drot;

g2.visible =false;

g1.visible = true;

t1.visible = true;

t2.visible = false;

}

else if (myMc.rotation < -180 || myMc.rotation < 180 && myMc.rotation > 90)

{

trace('teste3');

g1.visible = false;

g2.visible = true;

t1.visible = false;

t2.visible = true;

g2.rotation +=drot;

}

else if (myMc.rotation <=90 && myMc.rotation >= 0)

{

trace('teste4');

g1.visible = false;

g2.visible = true;

t2.visible = true;

t1.visible = false;

g2.rotation +=drot;

}*/

if (myMc.rotation > 0 && myMc.rotation < 90)

{

trace("teste1")

Teste2.visible = true;

Teste1.rotation +=drot;

Teste2.rotation +=drot;

}

else

{

Teste2.visible = false;

Teste2.x = 264,35;

Teste2.y = 200,6;

Teste1.x = 265,3;

Teste1.y = 200,95;

}

/*

else{

Teste1.visible = false;

Teste2.visible = false;

}*/

if(drot < -180)

{

trace("Menos de -180");

myMc.rotation = (-180);

trace(myMc.rotation);

/*

Pode Apagar (Apenas Teste):

drot =180;

if ( drot > -0 )

{

myMc.rotation = 180;

trace(myMc.rotation)

}

*/

trace(drot)

}

    if(drot > 185 ){

trace("Maior de 180sdgsdfhd")

myMc.rotation = 180;

trace(myMc.rotation)

/*

Pode Apagar (Apenas Teste):

myMc.x = 266,75;

myMc.y = 201,8;

drot =180;

if ( drot > -180 )

{

drot =0;

angulo.text = "0";

trace("nada2");

}

*/

trace(drot)

}

else{

myMc.rotation += drot;

trace(myMc.rotation)

}

}

function onMouseMove2(e:MouseEvent):void {

    var dx2:int = stage.mouseX - myMc2.x;

    var dy2:int = stage.mouseY - myMc2.y;

    rot2 = Math.atan2(dy2, dx2) * TO_DEGREE;

trace("Seta Grande: "+Math.abs(Math.floor(rot2)))

//verificar hora

Hhoras();

teste2 = Math.floor(rot2);

    drot2 = rot2 - myMc2.rotation;

grau = teste1-teste2;

trace("Grau: "+Math.abs(grau));

angulo.text = String(Math.abs(grau));

    if(drot2 < -180)

{

trace("Menos de -180")

myMc2.rotation = (-180);

trace(myMc2.rotation)

/*

Pode Apagar (Apenas Teste):

drot =180;

if ( drot > -0 )

{

myMc.rotation = 180;

trace(myMc.rotation)

}

*/

trace(drot2)

}

    if(drot2 > 185 ){

trace("Maior de 180sdgsdfhd")

myMc2.rotation = 180;

trace(myMc2.rotation)

/*

Pode Apagar (Apenas Teste):

myMc.x = 266,75;

myMc.y = 201,8;*/

/*drot =180;*/

/*if ( drot > -180 )

{

drot =0;

angulo.text = "0";

trace("nada2");

}

*/

trace(drot2)

}

/*

Pode Apagar (Apenas Teste):

else if ( teste1 == 180 && teste2 == 180 )

{

trace('QQ360')

}

*/

else{

myMc2.rotation += drot2;

trace(myMc2.rotation)

}

}

function stopRotate(e:MouseEvent) {

    // Em vez de chamar stopDrag, você simplesmente remove o Move de movimentação

myMc.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);

}

function stopRotate2(e:MouseEvent) {

    // Em vez de chamar stopDrag, você simplesmente remove o Move de movimentação

myMc2.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove2);

}

This topic has been closed for replies.
Correct answer kglad

Onde eu insiro esta função em meu código ? Não intendi a onde poderia estar colando esta função ou pelo menos o conceito dela, tentei modificar as contas que estava fazendo para a que você havia passado.

function onMouseMove(e:MouseEvent):void {

    var dx:int = stage.mouseX - myMc.x;

    var dy:int = stage.mouseY - myMc.y;

    rot = Math.atan2(dy, dx) * TO_DEGREE2;

     trace("Seta Pequena: "+Math.abs(Math.floor(rot)))

     myMc.rotation = angle;

}

O seguindo o codigo está funcionando que ele ja pega um grau pre definido em (const TO_DEGREE:Number = 180/Math.PI;)

ai depois eu pego a posição do mouse x - a posição do objeto da minha seta x, mesma coisa para y.

Dai eu faço esta conta:

rot = Math.atan2(dy, dx) * TO_DEGREE2;

Que pelo que entendi ele retorna um suposto ângulo. Onde iria estar fazendo esta conta que você falou. Não intendi. Se puder me explicar melhor. Agradeço.


wherever you want to make the conversion - probably your textfield that displays the angle:

angulo.text = String(angleF(Math.abs(grau)));

1 reply

kglad
Community Expert
Community Expert
October 8, 2018

what is that code supposed to do?

Participant
October 9, 2018

Este código deveria permitir que os ponteiros do relógio ao rodarem clicando e segurando-os, mostrassem o ângulo correto pelo TextField e ir aumentando aquele "circulo", no meio das duas setas, tanto por dentro quanto por fora. Foi o que estava tentando fazer, agora se o conceito ou o método que estava utilizando esta incorreto por favor me corrija, só que o que eu não estava conseguindo mesmo é aumentar o "circulo" por dentro ou por fora conforme as setas se deslocam de lugar. não faço a minima ideia de como posso estar fazendo isso.

kglad
Community Expert
Community Expert
October 9, 2018

Sim seria isso sim, bom na verdade é que não sei utilizar muito o rotation, comecei a programar AS3 faz pouco tempo. O que eu entendi dele foi que ele funciona com o eixo y eu suponho e pelo o que também andei pesquisando, que no AS3 ele é ao contrário, os números negativos são para cima e os positivos para baixo, se estiver errado por favor me corrija. O que gostaria de estar fazendo é que quando as setas girarem no sentido contrário do relógio, ele passando pelo -180 ele continuar contando até 360 e passando de 360, ele voltar ao 0 novamente, teria como fazer isso ou deveria estar utilizando outro método ?

Também gostaria de saber como faço para quando os posteiros rodarem, tanto o grande quanto o pequeno, como faço para aquele setor em formato de pizza aumentar e também diminuir, seria isso por código, por animação.


you can use the following function to convert angles from -180 to 180 to angles between 0 and 360:

function angleF(ang:Number):Number{

return (ang+360)%360;

}