«Оживление» сцены. Движение объектов по сцене

Добавим новый класс WorldController, который будет управлять расположением объектов на сцене.

В класс World добавим ссылку на объект данного класса, а так же в функции render() будем вызывать обновление.

Так же в при создании объектов укажем начальное значение скоростей по осям в виде случайного числа от 20 до 150.

Для возможности доступа к скорости для класса Object добавим getter функцию для velosity.

Object.java
package kz.dsdk.aquarium.models;
import com.badlogic.gdx.math.Vector3;
/**
* Created by ytzh on 1/18/16.
*/
public class Object {
Vector3 position;
Vector3 velosity;
public Object(Vector3 position, Vector3 velosity){
this.position = position;
this.velosity = velosity;
}
public Vector3 getPosition() {
return position;
}
public Vector3 getVelosity() {
return velosity;
}
}

Colored with dumpz.org

World.java
package kz.dsdk.aquarium.models;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Array;
import kz.dsdk.aquarium.controllers.WorldController;
/**
* Created by ytzh on 1/18/16.
*/
public class World {
private Array<Object> objects;
Texture bgt;
Texture objt;
WorldController worldController;
private int width, height;
public Array<Object> getObjects() {
return objects;
}
public Texture getBgt() {
return bgt;
}
public Texture getObjt() {
return objt;
}
public World(int width, int height) {
this.width = width;
this.height = height;
this.worldController = new WorldController(this);
objects = new Array<Object>();
this.bgt = new Texture(Gdx.files.internal("sea.jpg"));
this.objt = new Texture(Gdx.files.internal("ball.png"));
for(int i = 0; i<60;i++){
objects.add(new Object(new Vector3( //Координаты
MathUtils.random(0,this.width-objt.getWidth()),
MathUtils.random(0,this.height-objt.getHeight()),0),
new Vector3(//Скорость
MathUtils.random(20,150),
MathUtils.random(20,150),0)));
}
}
public void render(SpriteBatch sb){
sb.draw(bgt,0,0);
for(Object obj:objects){
sb.draw(objt,obj.getPosition().x,obj.getPosition().y);
}
worldController.update();
}
public void dispose(){
bgt.dispose();
objt.dispose();
}
}

Colored with dumpz.org

WorldController.java
package kz.dsdk.aquarium.controllers;
import com.badlogic.gdx.Gdx;
import kz.dsdk.aquarium.models.*;
/**
* Created by ytzh on 1/18/16.
*/
public class WorldController {
private World world;
public WorldController(World world) {
this.world = world;
}
public void update(){
for(kz.dsdk.aquarium.models.Object object:world.getObjects()){
if(object.getPosition().x>=world.getBgt().getWidth()-world.getObjt().getWidth() || object.getPosition().x<= 0 ){
object.getVelosity().x *= -1;
}
if(object.getPosition().y>=world.getBgt().getHeight()-world.getObjt().getHeight() || object.getPosition().y<= 0 ){
object.getVelosity().y *= -1;
}
object.getPosition().add(object.getVelosity().x * Gdx.graphics.getDeltaTime(),object.getVelosity().y*Gdx.graphics.getDeltaTime(),0);
}
}
}

Colored with dumpz.org

Метки: . Закладка Постоянная ссылка.