mini-curso javafx aula2

62
Raphael Marques Mestrando em Informática da UFPB [email protected] raphaelmarques.wordpress.com

Upload: raphael-marques

Post on 06-Jun-2015

2.867 views

Category:

Documents


1 download

DESCRIPTION

Slides da 2a aula do mini-curso de JavaFX que ministrei na UFPB

TRANSCRIPT

Page 1: Mini-curso JavaFX Aula2

Raphael Marques

Mestrando em Informática da [email protected]

Page 2: Mini-curso JavaFX Aula2

2

Page 3: Mini-curso JavaFX Aula2

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

Page 4: Mini-curso JavaFX Aula2

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

Page 5: Mini-curso JavaFX Aula2

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

Page 6: Mini-curso JavaFX Aula2

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

Page 7: Mini-curso JavaFX Aula2

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

Page 8: Mini-curso JavaFX Aula2

var n = [1..10];

var pares = n[i | i mod 2 == 0];

println(pares);//[ 2, 4, 6, 8, 10 ]

println(sizeof pares);//5

8

Page 9: Mini-curso JavaFX Aula2

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

Page 10: Mini-curso JavaFX Aula2

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

Page 11: Mini-curso JavaFX Aula2

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

Page 12: Mini-curso JavaFX Aula2

12

Page 13: Mini-curso JavaFX Aula2

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

Page 14: Mini-curso JavaFX Aula2

var x = {

var a = 5;

a * 2;

};

println(x); //10

14

Page 15: Mini-curso JavaFX Aula2

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

Page 16: Mini-curso JavaFX Aula2

var x = 0;

while(x < 10){

x++;

}

println(x); //10

var x = 0;

while(x < 10)

x++;

println(x); //10

16

Page 17: Mini-curso JavaFX Aula2

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

Page 18: Mini-curso JavaFX Aula2

18

Page 19: Mini-curso JavaFX Aula2

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

Page 20: Mini-curso JavaFX Aula2

var conta = Conta{nome: "Raphael"numero: 123

};

println(conta);//Conta(Raphael,123,$1000)

20

Page 21: Mini-curso JavaFX Aula2

class MyClass extends Conta {}

class MyClass extends Serializable {}

class MyClass extends Conta, Serializable {}

21

Page 22: Mini-curso JavaFX Aula2

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

Page 23: Mini-curso JavaFX Aula2

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

Page 24: Mini-curso JavaFX Aula2

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

Page 25: Mini-curso JavaFX Aula2

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

Page 26: Mini-curso JavaFX Aula2

26

Page 27: Mini-curso JavaFX Aula2

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

Page 28: Mini-curso JavaFX Aula2

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

Page 29: Mini-curso JavaFX Aula2

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

Page 30: Mini-curso JavaFX Aula2

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

Page 31: Mini-curso JavaFX Aula2

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

Page 32: Mini-curso JavaFX Aula2

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

Page 33: Mini-curso JavaFX Aula2

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

Page 34: Mini-curso JavaFX Aula2

Donut{

x: 100

y: 100

raioExterno: 80

raioInterno: 50

fill: Color.RED

stroke: Color.BLACK

}

34

Page 35: Mini-curso JavaFX Aula2

Donut{

x: 100

y: 100

raioExterno: 80

raioInterno: 50

fill: Color.RED

stroke: Color.BLACK

}

35

Page 36: Mini-curso JavaFX Aula2

36

Page 37: Mini-curso JavaFX Aula2

Criar um projeto chamado Praticas Site:

http://sites.google.com/site/joseraphaelmarques/

Link lateral: eventos Baixar os 4 arquivos no pacote praticas

37

Page 38: Mini-curso JavaFX Aula2

38

Page 39: Mini-curso JavaFX Aula2

39

Page 40: Mini-curso JavaFX Aula2

40

Page 41: Mini-curso JavaFX Aula2

41

(x,y)

angle

Y

X0

vel

Page 42: Mini-curso JavaFX Aula2

42

(x,y)

angle

Y

X0

vel

vel+acel

Page 43: Mini-curso JavaFX Aula2

43

(x,y)

angle

Y

X0

vel

vel-acel

Page 44: Mini-curso JavaFX Aula2

44

(x,y)

angle

Y

X0

vel

vx

vy

Page 45: Mini-curso JavaFX Aula2

45

(x,y)

Y

X0

turn left

turn right

Page 46: Mini-curso JavaFX Aula2

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

Page 47: Mini-curso JavaFX Aula2

47

Page 48: Mini-curso JavaFX Aula2

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

Page 49: Mini-curso JavaFX Aula2

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

Page 50: Mini-curso JavaFX Aula2

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

Page 51: Mini-curso JavaFX Aula2

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

Page 52: Mini-curso JavaFX Aula2

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

Page 53: Mini-curso JavaFX Aula2

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

Page 54: Mini-curso JavaFX Aula2

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

Page 55: Mini-curso JavaFX Aula2

55

Page 56: Mini-curso JavaFX Aula2

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

Page 57: Mini-curso JavaFX Aula2

public class Game extends CustomNode{...public override function create():Node{

Group{content: [

bg,car1,car2,

]}

}...

}

57

Page 58: Mini-curso JavaFX Aula2

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

Page 59: Mini-curso JavaFX Aula2

59

Page 60: Mini-curso JavaFX Aula2

var game = Game{};

Stage {title: "RaceFX"scene: Scene {

width: 640height: 480content: game

}}

60

Page 61: Mini-curso JavaFX Aula2

61

Page 62: Mini-curso JavaFX Aula2

62