LibGDX losowanie textury dla obiektu

0

Cześć,
piszę właśnie swoją pierwszą grę w LibGDX, no i wiadomo, jest klasa głównego bohatera, klasa przeszkody itd. I mam problem w klasie przeszkody, ponieważ chciałem by przed jej rysowaniem była losowana jest textura i napisałem coś takiego, ale nie chce się kompilować. Czy może mi ktoś wytłumaczyć czy dobrze rozumiem pojęcie klasy, obiektu, czy może właśnie tutaj coś jest nie tak?

package com.lefthandfreegames.happycart;

import java.util.Random;

import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.math.Vector2;

public class Auta {

private Texture auto;
private String rysunek;
private Random rand;
private int AUTOTYPE = 12;
private Vector2 positionAuto;
private int y;

public Auta(float x){

  rysunek = " ";
  
  switch(rand.nextInt(AUTOTYPE)){
  case 1:
  	rysunek = "cars/blucar.png";
  case 2:
  	rysunek = "cars/bluecar1.png";
  case 3:
  	rysunek = "cars/bluecar2.png";
  case 4:
  	rysunek = "cars/greencar1.png";
  case 5:
  	rysunek = "cars/greencar2.png";
  case 6:
  	rysunek = "cars/hoobo.png";
  case 7:
  	rysunek = "cars/purplecar.png";
  case 8:
  	rysunek = "cars/purplecar1.png";
  case 9:
  	rysunek = "cars/racecar.png";
  case 10:
  	rysunek = "cars/redcarblank.png";
  case 11:
  	rysunek = "cars/repaircar.png";
  case 12:
  	rysunek = "cars/she.png";
  }
  
  	
  
  auto = new Texture(rysunek);
  positionAuto = new Vector2(x,y);
  
  
  
  

}

public Texture getAuto() {
return auto;
}

public Vector2 getPositionAuto() {
return positionAuto;
}

}

pomysł wygląda tak, że jest switch, zmienna losowa i w zależności od wylosowanego numeru String rysunek przyjmuje inną wartość, która potem jest przekazywana do polecenia

auto = new Texture(rysunek);

które już konkretnie określa jej wartość.
Czy może moje myślenie jest złe i po prostu powinienem stowrzyć wewnątrz klasy kilka obiektów, każdy o innej teksturze? Czy może jakieś inne rozwiązanie?

0

Co ci za błąd wyskakuje? dorób obsługę default w switchu. Osobiście upakowałbym to w enuma. Ale póki co programuj jak ci się podoba, naucz się działać w libGDX a potem do przodu, jakiś ECS ashley albo artemis i możesz działać:)

0

Rozwiązałem to po prostu tak:

rand = new Random();

  switch(rand.nextInt(AUTOTYPE)){
  case 1:
  	autoTexture = new Texture("cars/blucar.png");
  	break;
  case 2:
  	autoTexture = new Texture("cars/bluecar1.png");
  	break;
  case 3:
  	autoTexture = new Texture("cars/bluecar2.png");
  	break;
  case 4:
  	autoTexture = new Texture("cars/greencar1.png");
  	break;
  case 5:
  	autoTexture = new Texture("cars/greencar2.png");
  	break;
  case 6:
  	autoTexture = new Texture("cars/hoobo.png");
  	break;
  case 7:
  	autoTexture = new Texture("cars/purplecar.png");
  	break;
  case 8:
  	autoTexture = new Texture("cars/purplecar1.png");
  	break;
  case 9:
  	autoTexture = new Texture("cars/racecar.png");
  	break;
  case 10:
  	autoTexture = new Texture("cars/redcarblank.png");
  	break;
  case 11:
  	autoTexture = new Texture("cars/repaircar.png");
  	break;
  case 12:
  	autoTexture = new Texture("cars/she.png");
  	break;
  }
0

Nie wiem w czym masz problem ? Jeżeli pytasz czy tak to się powinno zaprogramować to...
Kiepskie to rozwiązanie, według podstawowych reguł dobrego programowania, klasa powinna mieć jedną odpowiedzialność. Więc wybieranie/losowanie powinieneś przenieść do osobnej klasy, a klasa Auta(Co samo w sobie jest złym nazewnictwem) powinna zajmować się jedynie reprezentacją Auta. Poza tym z różnych względów fajnie przenieść ścieżki do plików do xml'a gdzie z łatwością będziesz mógł modyfikować i dodawać nowe egzemplarze, nie zmieniając nic w kodzie no poza liczbą case'ów, która może w przypadku xml'a być też znana (AUTOTYPE)

0

Kolega dopiero zaczyna przygodę z libGDX i javą, więc niech na razie pisze jak chce i się obezna z tym wszystkim:) potem to wiadomo że switche najlepiej zamienić jakimś enumem który można fajnie trzymać w JSON'ie i z tego dynamicznie zczytywać plansze, save etc. Do tego dojść powinna nauka ECS`a np. artemis albo ashley i jakiegoś systemu zdarzeniowego np. z guavy. Ale to nie rzeczy na teraz:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1