GlScene para iniciantes - part 3

download GlScene para iniciantes - part 3

of 10

description

Escrito porSubHeaven – [email protected]

Transcript of GlScene para iniciantes - part 3

SubHeaven [email protected]

Parte 03

Agora vamos colocar movimentos em nossa cena. Vamos tentar colocar um jogo de movimento de cmera e objeto parecido com o jogo World of Warcraft. Pra isso podemos partir de nosso projeto anterior ou criar um novo.

Vamos incluir um GLNavigator (Uma classe que engloba todas a principais rotinas para a movimentao de objetos na cena, facilitando e muito a nossa vida) em nossa cena. Mudar sua propriedade Name para Navegador e a propriedade MovingObject para o nosso MainCubo, indicando assim qual objeto da cena o nosso GLNavigator vai controlar.

Vamos aproveitar e incluir um GLCadencer a cena e ligar sua propriedade Scene ao no GLScene1.

Ao contrario do ultimo tutorial onde no escrevemos nenhum cdigo (S referenciamos uma unit em nosso projeto) esse basicamente pelo velho mtodo. Ento vamos l. Vamos incluir quatro variveis do tipo single (mx1, mx2, my1, my2) no private de nosso projeto. Eles sero usados para capturar a posio do mouse quando o boto esquerdo do mesmo for pressionado e calcular o quando devemos girar a cmera.

Vamos incluir tambm trs constantes. Velocidade ir influenciar a velocidade de movimento de nosso personagem, Angulo influencia a velocidade de giro e DistMax a distncia mxima permitida para a cmera em relao ao personagem.

Vamos comear com o giro de cmera. Vamos selecionar nosso GLSceneViewer e incluir essas linhas no evento OnMouseDown do mesmo: procedure TForm1. GLSceneViewer1MouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer); Begin mx1 := x; mx2 := x; my1 := y; my2 := y; end; Estamos, com isso, marcando onde o jogador pressionou o mouse. No evento OnMouseMove do mesmo GLSceneViewer vamos verificar se o boto esquerdo est pressionado e se estiver vamos acompanhar sua posio e ir guardando seu valor em mx2 e my2. procedure TForm1. GLSceneViewer1MouseMove(e(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in shift then begin mx2 := x; my2 := y; end; end; Agora podemos ir ao evento OnProgress do nosso GLCadencer1 e verificar se houve algum movimento de cmera. Se houver, movimentamos nossa cmera e atualizamos as variveis de controle. Agora vamos selecionar nosso Form1 e vamos ao evento OnMouseWheel do mesmo. Nele vamos verificar se o jogador usa a rodinha do mouse e ajustar a distncia da cmera. procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); var Fator, Distancia: Single; begin Fator := Power(1.1, WheelDelta/120); Distancia := Camera.DistanceTo(MainCubo); if (Fator < 1) or (Distancia DistMax) then Exit else Camera.AdjustDistanceToTarget(Fator); Se eu estiver tentando afastar a cmera e sua distancia for maior que o limite no fao nada (Comando Exit) seno eu ajusto a cmera. Vamos incluir a unit Keyboard em nosso projeto pois iremos utiliza-la para nossas prximas incluses.

Vamos possibilitar o ajuste de cmera pra quem no tem o Mouse Wheel. Pra isso vamos voltar ao evento OnProgress do GLCadencer e incluir: if IsKeyDown(VK_NEXT) and (Camera.DistanceTo(MainCubo)