mini-curso javafx aula2
DESCRIPTION
Slides da 2a aula do mini-curso de JavaFX que ministrei na UFPBTRANSCRIPT
Raphael Marques
Mestrando em Informática da [email protected]
2
var seq1 : Integer[ ] = [1,2,3,4,5,6,7,8,9,10];println(seq1);//[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
var seq2 = [1..10];println(seq2);//[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
var seq3 = [1..10 step 2];println(seq3);//[ 1, 3, 5, 7, 9 ]
var seq4 = [10..1 step -2];println(seq4);//[ 10, 8, 6, 4, 2 ]
3
var seq1 = [1..3 step 0.5];println(seq1);//[ 1.0, 1.5, 2.0, 2.5, 3.0 ]
var seq2 = [1.5..3];println(seq2);//[ 1.5, 2.5 ]
var seq3 : (Integer[ ])[ ] = [1,2,3,4,5,6];println(seq3);//[ [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ], [ 6 ] ]
var seq4 : (Integer[ ])[ ] = [ [1..3] , [4..6] ];println(seg4);//[ [ 1, 2, 3 ], [ 4, 5, 6 ] ]
4
var seq1 : Integer[] = 0;println(seq1);//[ 0 ]
var seq2 = [1..5];println(seq2);//[ 1, 2, 3, 4, 5 ]
seq2[0] = 0;println(seq2);//[ 0, 2, 3, 4, 5 ]
5
var seq1 = [1..5];var seq2 = seq1;
seq2[0] = 0;
println(seq1);//[ 1, 2, 3, 4, 5 ]
println(seq2);//[ 0, 2, 3, 4, 5 ]
6
var uteis = ["seg","ter","qua","qui","sex"];
var fds = ["sab","dom"];
var semana = [uteis,fds];
var semana2 = [uteis,["sab","dom"]];
var semana3 = [uteis,"sab","dom"];
7
var n = [1..10];
var pares = n[i | i mod 2 == 0];
println(pares);//[ 2, 4, 6, 8, 10 ]
println(sizeof pares);//5
8
var n = [1..5]; //[ 1, 2, 3, 4, 5 ]
insert 4 into n; //[ 1, 2, 3, 4, 5, 4 ]
insert 7 before n[3]; //[ 1, 2, 3, 7, 4, 5, 4 ]insert 8 after n[3]; //[ 1, 2, 3, 7, 8, 4, 5, 4 ]
delete 4 from n; //[ 1, 2, 3, 7, 8, 5 ]delete n[2] from n; //[ 1, 2, 7, 8, 5 ]
delete n[2]; //[ 1, 2, 8, 5 ]delete n; //[ ]
9
var n = [1..5]; //[ 1, 2, 3, 4, 5 ]
n = reverse n; //[ 5, 4, 3, 2, 1 ]
var n2 = [5..1 step -1]; //[ 5, 4, 3, 2, 1 ]
println(n == n2); //true
10
var n = [1..10]; //[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
n[0..4] //[ 1, 2, 3, 4, 5 ]
n[0..<4] //[ 1, 2, 3, 4 ]
n[5..] //[ 6, 7, 8, 9, 10 ]
n[0..<] //[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
11
12
Tudo em JavaFX é uma expressão
loops, condicionais, blocos
Em alguns casos as expressões tem tipo Void.
while, classes
A ultima expressão de um bloco é o retorno dele.
13
var x = {
var a = 5;
a * 2;
};
println(x); //10
14
var x = 10;
var a = 0;
if(x > 0){
a = 1;
}else{
a = 2;
}
println(a); //1
var x = 10;
var a = 0;
var b = if(x > 0){
a = 1;
}else{
a = 2;
};
println(a); //1
println(b);//1
15
var a : Number;
var b = a = 1;
println(b);//1.0
var x = 0;
while(x < 10){
x++;
}
println(x); //10
var x = 0;
while(x < 10)
x++;
println(x); //10
16
for(i in [1..5]){
print("[{i}]");
}
//[1][2][3][4][5]
var a = [1..5];
for(i in a)
print("[{i}]");
//[1][2][3][4][5]
var a = for(i in [1..5])
i*i;
println(a);
//[ 1, 4, 9, 16, 25 ]
var b = for(i in [1,4,9,16,25])
Math.sqrt(i);
println(b);
//[ 1.0, 2.0, 3.0, 4.0, 5.0 ]
17
18
class Conta{var nome: String;var numero: Integer;var saldo = 1000;
init{}
function deposito(valor: Integer):Void{saldo += valor;
}
override function toString(){"Conta({nome},{numero},${saldo})";
}}
19
var conta = Conta{nome: "Raphael"numero: 123
};
println(conta);//Conta(Raphael,123,$1000)
20
class MyClass extends Conta {}
class MyClass extends Serializable {}
class MyClass extends Conta, Serializable {}
21
mixin class Terrestre{function andar(){ println("andando"); }
}
mixin class Aquativo{function nadar(){ println("nadando"); }
}
class Jacare extends Terrestre, Aquativo{ }
var jacare = Jacare{};jacare.andar();jacare.nadar();
22
default
Visível apenas no script
package
Visível no mesmo pacote
protected
Visível no mesmo pacote ou subclasses.
public
Sem restrições
23
public-read
Sem restrição para leitura
Só pode ser escrito dentro do script
Para permissão de escrita:
▪ package public-read
▪ protected public-read
public-init
Pode ser inicializado na criação do objeto, em outros casos é igual ao public-read
24
arquivo MyClass.fx:
public var x = 1;public class MyClass{
public var y = 2;}
outro arquivo:
MyClass.x = 0;var obj = MyClass{};obj.y = 0;
25
26
class Donut extends CustomNode {public var x = 0.0;public var y = 0.0;public var raioExterno = 10.0;public var raioInterno = 5.0;public var fill: Paint = Color.BLACK;public var stroke: Paint;
...}
27
class Donut extends CustomNode {...
public override function create(): Node {Group{
content: bind ShapeSubtract{a: Circle{radius: raioExterno}b: Circle{radius: raioInterno}fill: bind fillstroke: bind stroketranslateX: bind xtranslateY: bind y
}}
}} 28
class Donut extends CustomNode {...
public override function create(): Node {Group{
content: bind ShapeSubtract{a: Circle{radius: raioExterno}b: Circle{radius: raioInterno}fill: bind fillstroke: bind stroketranslateX: bind xtranslateY: bind y
}}
}} 29
class Donut extends CustomNode {...
public override function create(): Node {Group{
content: bind ShapeSubtract{a: Circle{radius: raioExterno}b: Circle{radius: raioInterno}fill: bind fillstroke: bind stroketranslateX: bind xtranslateY: bind y
}}
}} 30
class Donut extends CustomNode {...
public override function create(): Node {Group{
content: bind ShapeSubtract{a: Circle{radius: raioExterno}b: Circle{radius: raioInterno}fill: bind fillstroke: bind stroketranslateX: bind xtranslateY: bind y
}}
}} 31
class Donut extends CustomNode {...
public override function create(): Node {Group{
content: bind ShapeSubtract{a: Circle{radius: raioExterno}b: Circle{radius: raioInterno}fill: bind fillstroke: bind stroketranslateX: bind xtranslateY: bind y
}}
}} 32
class Donut extends CustomNode {...
public override function create(): Node {Group{
content: bind ShapeSubtract{a: Circle{radius: raioExterno}b: Circle{radius: raioInterno}fill: bind fillstroke: bind stroketranslateX: bind xtranslateY: bind y
}}
}} 33
Donut{
x: 100
y: 100
raioExterno: 80
raioInterno: 50
fill: Color.RED
stroke: Color.BLACK
}
34
Donut{
x: 100
y: 100
raioExterno: 80
raioInterno: 50
fill: Color.RED
stroke: Color.BLACK
}
35
36
Criar um projeto chamado Praticas Site:
http://sites.google.com/site/joseraphaelmarques/
Link lateral: eventos Baixar os 4 arquivos no pacote praticas
37
38
39
40
41
(x,y)
angle
Y
X0
vel
42
(x,y)
angle
Y
X0
vel
vel+acel
43
(x,y)
angle
Y
X0
vel
vel-acel
44
(x,y)
angle
Y
X0
vel
vx
vy
45
(x,y)
Y
X0
turn left
turn right
Criar um projeto chamado RaceFX Site:
http://sites.google.com/site/joseraphaelmarques/
Link lateral: RaceFX Link: Parte 1 Baixar para o pacote racefx:
bluecar.png
redcar.png
Game.fx
46
47
public def REDCAR = Image {url: "{__DIR__}redcar.png"
};public def BLUECAR = Image {
url: "{__DIR__}bluecar.png"};
def RAD180 = Math.PI;def RAD360 = 2*Math.PI;
def ACEL = 100;def TURN = Math.PI;def VMIN = -50;def VMAX = 250;def FRICTION = 50;
48
public class Car extends CustomNode{//posicaopublic var x: Number;public var y: Number;public var angle: Number;public var vel: Number;
public-init var image: Image;
//controlespublic var left = false;public var right = false;public var up = false;public var down = false;...
}
49
public class Car extends CustomNode{...public override function create(): Node {
return ImageView {image: imagetranslateX: bind x – 15translateY: bind y - 7.5rotate: bind -Math.toDegrees(angle);
};} ...
}
50
public class Car extends CustomNode{...function updateTurn(factor: Number):Void{
if(left != right){//xorvar t = if(left) TURN else –TURN;angle = (angle + t*factor) mod RAD360;
}}...
}
51
public class Car extends CustomNode{...function updateAcel(factor: Number):Void{
if(down){//freiandovel = Math.max(VMIN, vel - ACEL*factor);
}else if(up){//acelerandovel = Math.min(VMAX, vel + ACEL*factor);
}else{//desacelerandoif(vel > 0){
vel = Math.max(0, vel - FRICTION*factor);}else{
vel = Math.min(0, vel + FRICTION*factor);}
}}...
}
52
public class Car extends CustomNode{...function updateMove(factor: Number):Void{
var vx = Math.cos(angle) * vel * factor;var vy = -Math.sin(angle) * vel * factor;
var i = x + vx;var j = y + vy;
x = i;y = j;
}...
}
53
public class Car extends CustomNode{...public function update(time: Long):Void{
var factor = time / 1000.0;if(factor == 0) return;
updateTurn(factor);updateAcel(factor);
if(vel != 0){updateMove(factor);
}}...
}
54
55
public class Game extends CustomNode{public-read var car1 = Car{};public-read var car2 = Car{};
var lastTime: Long;function update():Void{}var timeline = Timeline {}
public function reset():Void{}public function play(){}
var bg = Rectangle{};
init{}public override function create():Node{}
}
56
public class Game extends CustomNode{...public override function create():Node{
Group{content: [
bg,car1,car2,
]}
}...
}
57
public class Game extends CustomNode{...function checkKey(code: KeyCode, value: Boolean){
if(code == KeyCode.VK_LEFT){car1.left = value;
}else if ...}
function onKeyPressed(e:KeyEvent):Void{checkKey(e.code, true);
}
function onKeyReleased(e:KeyEvent):Void{checkKey(e.code, false);
}...
}
58
59
var game = Game{};
Stage {title: "RaceFX"scene: Scene {
width: 640height: 480content: game
}}
60
61
62