quarta-feira, 21 de setembro de 2011

Usando Funções em UnrealScript

As funções no UnrealScript são blocos de código definidos dentro das classes. Em outras linguagens de programação orientado a objetos essas funções são conhecidas como Métodos. A definição de uma função no UnrealScript tem a seguinte forma:

function tipoRetorno nomeFuncao(tipoParam1 param1, tipoParam2 param2 ... )

O tipo de retorno e os parâmetros são opcionais. Para retornar um valor da função use o comando "return".

As funções podem ser sobrescritas (override) em subclasses. Por exemplo, na classe Actor existe uma função chamada PostBeginPlay() que é chamada quando um Actor for iniciar sua participação no jogo. Se criarmos uma subclasse de Actor podemos escrever uma nova versão para a função PostBeginPlay() em nossa subclasse. Nesses casos é recomendado que na nova função seja chamado a versão original da Classe Pai, para isso use a palavra Super dessa forma:

Super.PostBeginPlay();

O UnrealScript não suporta a sobrecarga (overload) de funções. Sendo assim, não é possível criar na mesma classe funções com o mesmo nome mudando apenas os tipos de parâmetros.

Na classe Actor existem diversas funções que são definidas com a palavra chave event ao invés de function. A única diferença é que as funções definidas com event podem ser chamadas a partir de código em C++.


As funções podem ter parâmetros de saída. Isto é útil quando uma função precisa retornar mais de um valor. Para usar parâmetros de saída utilize a palavra chave out na frente do parâmetro.

É possível atribuir valores padrões para parâmetros com o uso da palavra chave optional.

Existem diversas funções de propósitos gerais já definidas em UnrealScript como funções para Log e funções matemáticas.

Exemplo de código:
class TesteFuncoes extends Actor;

event PostBeginPlay()
{
   local float dano;
   local int num1, num2;

   Super.PostBeginPlay();
 
   dano = calculaDanoRecebido(125, 15 );
   `log( "Dano Recebido: " $ dano);

   geraDoisRandom(num1, num2);
   `log( "1º Numero Gerado : " $ num1);
   `log( "2º Numero Gerado : " $ num2);
}

function float calculaDanoRecebido(float forcaAtaque, int nivelDefesa)
{
   return (forcaAtaque * 10) / nivelDefesa;
}

function geraDoisRandom(out int numAleatorio1, out int numAleatorio2, optional int valorMaximo = 10)
{
   numAleatorio1 = Rand(valorMaximo);
   numAleatorio2 = Rand(valorMaximo);
}

Nenhum comentário:

Postar um comentário