2015-09-03 3 views
3

Я искал и широко в Интернете, и мне еще нужно найти ответ. У меня есть объект под названием GameIcon, который расширяет Sprite. Все об этом в порядке, кроме текстуры. Вот мой код для класса GameIcon.SetTexture и спрайты не работают по назначению! (LibGDX)

package com.xx4everPixelatedxx.gaterunner.sprites; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.Sprite; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.math.Rectangle; 
import com.badlogic.gdx.math.Vector3; 
import com.xx4everPixelatedxx.gaterunner.GateRunner; 

import javax.xml.soap.Text; 

/** 
* Created by Michael Jan on 8/17/2015. 
*/ 
public class GameIcon extends Sprite { 
    private int vX = 3; 
    private int vY = 3; 
    private int r = 9; 
    private int rotation; 

    private Vector3 position; 

    private Texture texture; 

    public GameIcon(int x, int y) { 
     position = new Vector3(x, y, 0); 
     texture = new Texture(Gdx.files.internal("icon_players/icon1.png")); 
     setTexture(texture); 
    } 

    public void update() { 
     position.add(vX, vY, 0); 
     rotation = rotation + r; 

     rotation = rotation % 360; 

     setRotation(rotation); 
     setOriginCenter(); 
    } 

    public void addPosition(int x, int y) { 
     position.add(x, y, 0); 
     setOriginCenter(); 
    } 

    public void negateVelocityX() { 
     vX = -vX; 
    } 

    public void negateRotation() { 
     r = -r; 
    } 

    public Vector3 getPosition() { 
     return position; 
    } 

    public int getvY() { 
     return vY; 
    } 

    public void setvY(int vY) { 
     this.vY = vY; 
    } 

    public int getvX() { 
     return vX; 
    } 

    public void setvX(int vX) { 
     this.vX = vX; 
    } 
} 

Вот icon1.png: https://i.gyazo.com/1d52f5e58b227f08809f6c14ae4c94a4.png

Вот что я получаю: https://i.gyazo.com/1881a9392955af34de5c55b9b8fac391.png

Обратите внимание, что вращение изображения и частицы предназначены. Проблема в том, что большой квадрат должен быть текстурой (icon1.png), и я не знаю, как это исправить.

(не хватает репутации размещать фотографии)

+0

Как вы его рендерите? –

+0

Вы, вероятно, не должны скрывать ссылки суперкласса на 'position',' texture' и 'rotation'. Это ошибка, ожидающая появления. И нет никаких оснований для подкласс Sprite, если вы скрываете все свои функциональные возможности. – Tenfour04

+0

@ m.antkowicz name.render (партия); – 4everPixelated

ответ

3

Я не знаком с LibGDX, но это может иметь что-то делать с тем фактом, что вы возможно перезапись TextureRegion.texture. Не могли бы вы попробовать пользователю ваш родительский класс Sprite(Texture) конструктор так:

... 
public class GameIcon extends Sprite { 
    private int vX = 3; 
    private int vY = 3; 
    private int r = 9; 
    private int rotation; 

    private Vector3 position; 

    //private Texture texture; 

    public GameIcon(int x, int y) { 
     super(new Texture(Gdx.files.internal("icon_players/icon1.png"))) 
     position = new Vector3(x, y, 0); 
    } 
... 

Как заявил Tenfour04 в комментариях, этот метод работает, потому что конструктор родителя применяет ширину и высоту текстуры, в то время как setTexture() не делает.

+0

Возможно, вы не знакомы с этим, но ваш ответ на месте. – Tenfour04

+1

Причина, по которой это необходимо, заключается в том, что метод 'setTexture' не применяет ширину и высоту текстуры, но суперструктор делает. – Tenfour04

+0

Спасибо @ Tenfour04. Не возражаете, если я уточню ответ с вашими объяснениями? –

Смежные вопросы