greenfoot 6

30
Fecha de la versión: Agosto de 2015 Actualizaciones:

Upload: elian-maya

Post on 12-Apr-2017

54 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Greenfoot 6

Fecha de la versión: Agosto de 2015

Actualizaciones:

Page 2: Greenfoot 6
Page 3: Greenfoot 6

3

Page 4: Greenfoot 6

La utilización de métodos nos permite utilizar las funciones que proporciona el equipo de desarrollo de Greenfoot. La definición de nuestros propios métodos nos permite expandir la funcionalidad de nuestros objetos.

Los métodos definidos pueden utilizarse del mismo modo que los métodos heredados suministrados por Greenfoot.

4

Page 5: Greenfoot 6

La definición de sus propios métodos no mejora el rendimiento del juego, pero puede aportar muchas otras ventajas como un código más legible y una agilización del tiempo de desarrollo.

5

Page 6: Greenfoot 6

Si el nombre que se asigna a los métodos es significativo, se facilita la lectura del código. Tenga en cuenta que todos los métodos de las clases Greenfoot comienzan por minúscula y utilizan la mayúscula para diferenciar entre palabras, es decir, getRandomNumber().

6

Page 7: Greenfoot 6

La definición del método public void handleMovement podría haberse convertido en privada. Esto significaría que cualquier subclase de abeja no podrían tener acceso a la misma. Es void porque no devuelve un valor y solo realiza una función que consiste en controlar el movimiento de la abeja.

7

Page 8: Greenfoot 6

No siempre resulta obvio el momento en el que debemos crear una subclase de nuestra subclase. La planificación del juego nos ayuda a detectar estos patrones desde el principio.

8

Page 9: Greenfoot 6

isAtEdge es un método agregado recientemente a la funcionalidad de Actor. Esto se debía a la naturaleza común de los programadores que tenían que escribir sus propias rutinas para manejar esta incidencia común.

9

Page 10: Greenfoot 6

Si una imagen gira 180 grados, girará exactamente la mitad de un giro completo, es decir, girará en el sentido opuesto.

10

Page 11: Greenfoot 6

Si se utiliza lógica booleana, es habitual utilizar variables locales. Se trata de variables que la instancia del objeto no guarda y que se asocian al nivel de método. Por lo tanto, cuando el método finaliza, el valor de la variable local se pierde. Es importante nombrar a estas variables de la forma adecuada, ya que pueden facilitar en gran medida la lectura de las expresiones booleanas.

11

Page 12: Greenfoot 6

El diagrama muestra que todas nuestras clases son subclases directas de Actor.

12

Page 13: Greenfoot 6

La clase se define como

Clase pública Araña que se extiende desde Actor

Simplemente cambiándolo por

Clase pública Araña se extiende desde Bug

Podemos cambiar la superclase de la araña. Este método es eficaz, ya que permanecemos en la misma ruta de acceso de herencia. Si la hemos cambiado a World, si tuviésemos código en Spider, generaría errores puesto que los métodos utilizados no se heredarían de la clase World.

13

Page 14: Greenfoot 6

Lo hemos hecho público porque queremos que las subclases utilicen este método.

Es void porque no devuelve ningún valor.

14

Page 15: Greenfoot 6

Tenga en cuenta que podemos llamar a un método de superclase (según su visibilidad/accesibilidad) si es público desde una subclase.

15

Page 16: Greenfoot 6

getWorld() devuelve una referencia al mundo actual.

getWorld().getWidth() devuelve el ancho del mundo actual.

Podríamos haber utilizado aquí un valor como 800, pero si cambiásemos el ancho del mundo, la funcionalidad de este método se vería afectada. Llamar al método getWidth() del mundo produce una solución flexible.

16

Page 17: Greenfoot 6

La clase World también tiene un método para devolver la altura: getHeight()

17

Page 18: Greenfoot 6

Siempre es aconsejable utilizar los métodos getHeight() y getWidth() en lugar de escribir un valor.

18

Page 19: Greenfoot 6

El método handleMovement() es nuestro propio método definido que hemos creado para controlar el movimiento desde Act en su propio método.

public void handleMovement() {

move(3);

if (Greenfoot.isKeyDown("left")) {

turn(-2);

}

if (Greenfoot.isKeyDown("right")) {

turn(2);

}

}

Le restamos 6 al ancho del mundo, por lo que no se detecta inmediatamente que otra vez estamos al borde.

19

Page 20: Greenfoot 6

Nuestra abeja ahora debe alejarse volando hacia un borde de la pantalla y reaparecer en el borde opuesto.

20

Page 21: Greenfoot 6

Recuerde cambiar la vista en el editor para mostrar la documentación, para ello cambiamos el cuadro desplegable en la parte superior de la ventana.

21

Page 22: Greenfoot 6

A pesar de que definimos una colisión como el momento en el que dos actores entran en contacto, también podemos modificar nuestro código para poder detectar una colisión si dos actores se aproximan entre sí. Los últimos tres métodos anteriores getIntersectingObjects(), getNeighbours() y getObjectsAtOffset() devuelven una lista. A continuación, tendríamos que procesar la lista para saber lo que queremos.

22

Page 23: Greenfoot 6

isTouching devuelve un valor booleano (true o false). Los otros dos métodos devuelven una referencia a un actor.

23

Page 24: Greenfoot 6

El código de este método podría escribirse de varias formas.

24

Page 25: Greenfoot 6

Si simplemente hubiésemos escrito isTouching(), devolvería true si tocásemos cualquier otro actor, incluya una instancia de otra abeja.

25

Page 26: Greenfoot 6

Getoneintersectingobject devuelve una referencia a un actor. El tipo de actor en este ejemplo se limita únicamente a ser una instancia de la clase Fly. Si no se encuentra una colisión con una mosca, la mosca de la variable de referencia proporciona un valor nulo.

A continuación, compruebe si la mosca ofrece un valor nulo y, de lo contrario, elimínela.

26

Page 27: Greenfoot 6

Para ordenar el método Act anterior, debemos crear otro método definido para conseguir que alcancemos el borde del mundo. De este modo, el método act quedaría:

Handlemovement();

Turnatedge();

Catchfly();

27

Page 28: Greenfoot 6

28

Page 29: Greenfoot 6

29

Page 30: Greenfoot 6