• 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

VPS Starter Arubacloud
0 głosów
171 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 227 wizyt
pytanie zadane 24 stycznia 2018 w Java przez Szaradek Obywatel (1,340 p.)
0 głosów
1 odpowiedź 184 wizyt
0 głosów
2 odpowiedzi 257 wizyt
pytanie zadane 19 lutego 2017 w Java przez cza213 Początkujący (370 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...