• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[LibGdx && Java] Zmniejszenie odległośći pomiędzy częściami snake'a po wywołaniu funkcji move

Object Storage Arubacloud
0 głosów
175 wizyt
pytanie zadane 3 sierpnia 2016 w Java przez Patryk Krajewski Nałogowiec (26,170 p.)

Witam,

Zacząłem uczyć się libgdx i piszę snake, ale mam problem taki jak w tytule czyli części na siebie nachodzą zamiast być obok siebie.  Kod:

package com.patrykkrajewski.snake.entities;

import java.util.ArrayList;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Rectangle;
import com.patrykkrajewski.snake.SnakeGame;

public class Snake {

	private ArrayList<Part> parts = new ArrayList<Part>();
	private Texture partTexture = new Texture("part.jpg");

	private final float VELOCITY = 300.f;
	private final int STARTING_PARTS = 15;

	private enum Directions {
		LEFT, RIGHT, UP, DOWN
	}

	private Directions direction = Directions.LEFT;

	public Snake() {
		for (int i = 0; i < STARTING_PARTS; i++) {
			System.out.println(i);
			addPart();
		}
	}

	private void addPart() {
		Part tmp = new Part(partTexture);

		if (parts.size() == 0) {
			tmp.setPosition(SnakeGame.WIDTH / 2, SnakeGame.HEIGHT / 2);
		} else {
			tmp.x = parts.get(parts.size() - 1).x + partTexture.getWidth();
			tmp.y = parts.get(parts.size() - 1).y;
		}
		parts.add(tmp);
	}

	public void draw(SpriteBatch spriteBatch) {
		for (Part p : parts) {
			p.draw(spriteBatch);
		}
	}

	private void move() {
		for (int i = parts.size() - 1; i > 0; i--) {
			parts.get(i).x = parts.get(i - 1).x;
			parts.get(i).y = parts.get(i - 1).y;
		}

		Rectangle tmp = parts.get(0);
		switch (direction) {
		case LEFT:
			tmp.x -= VELOCITY * Gdx.graphics.getDeltaTime();
			break;
		case RIGHT:
			tmp.x += VELOCITY * Gdx.graphics.getDeltaTime();
			break;
		case UP:
			tmp.y += VELOCITY * Gdx.graphics.getDeltaTime();
			break;
		case DOWN:
			tmp.y -= VELOCITY * Gdx.graphics.getDeltaTime();
			break;
		}
	}

	private void handleInputs() {
		if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) {
			direction = Directions.LEFT;
		} else if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) {
			direction = Directions.RIGHT;
		} else if (Gdx.input.isKeyPressed(Input.Keys.UP)) {
			direction = Directions.UP;
		} else if (Gdx.input.isKeyPressed(Input.Keys.DOWN)) {
			direction = Directions.DOWN;
		}
	}

	public void update() {
		handleInputs();
		move();
	}

}

 

Wie ktoś przez co jest to spowodowane?

EDIT: Próbowałem funkcji które dodają przestrzeń między blokami, ale przez to wąż ciągle się prostował.

1 odpowiedź

0 głosów
odpowiedź 3 sierpnia 2016 przez Patryk Krajewski Nałogowiec (26,170 p.)
edycja 3 sierpnia 2016 przez Patryk Krajewski
Odświeżam!

Im większe velocity tym większe odstępy pomiędzy częściami.
komentarz 3 sierpnia 2016 przez Mr. Szanowny Bywalec (2,180 p.)
A właśnie takie pytanie mnie naszło: czy odpowiednio ustawiłeś to velocity? Według twojego kodu jest to 300 px, czyli takie szerokości i wysokości mają twoje kwadraty? Trochę sporo jak na snake.
komentarz 4 sierpnia 2016 przez Patryk Krajewski Nałogowiec (26,170 p.)
Jak velocity ustawie na taki rozmiar jaki ma jedna część to w ogóle wszystkie części są w sobie.

Podobne pytania

0 głosów
0 odpowiedzi 228 wizyt
pytanie zadane 24 stycznia 2018 w Java przez Szaradek Obywatel (1,340 p.)
0 głosów
1 odpowiedź 187 wizyt
0 głosów
2 odpowiedzi 265 wizyt
pytanie zadane 19 lutego 2017 w Java przez cza213 Początkujący (370 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...