LibGdx - Vytvorte sprite podľa riadku - java, graphics, libgdx

Mám vykreslenú izometrickú mapu.

Zoberiem si súčasnú pozíciu môjho sprite a cieľovú pozíciu miesta, kde by mal byť môj skript po pohybe:

    // region is my TextureRegion.
int x1 = getIsometricX(1,1,region);
int x2 = getIsometricX(1,2,region);

int y1= getIsometricY(1,1,region);
int y2 = getIsometricY(1,2,region);

A potom nakreslím jednoduchú čiaru ShapeRenderer aby ste zistili, či sú miestne / cieľové body správne nastavené, a obdĺžnik, aby ste mohli vidieť, kde sprite renderovanie začína.

    renderer.setProjectionMatrix(camera.combined);
renderer.begin(ShapeRenderer.ShapeType.Line);
renderer.setColor(Color.RED);
renderer.line(x1 + location.getOffsetx(), y1 + location.getOffsety(), x2 + location.getOffsetx(), y2 + location.getOffsety());
renderer.rect(x1 + location.getOffsetx(), y1 + location.getOffsety(), region.getRegionWidth(), region.getRegionHeight());
renderer.end();

Každý môj skript nastavil offsetX a offsetY, aby upravil svoju polohu na izometrickú dlaždicu, pretože každý sprite je iný.

Výstup vypadá takto:

img

čo vidíte tu, je začiatočným bodom, odkiaľ sprite začína kresliť (vidíte, že jeho posuny sú upravené tak, aby to vyzeralo ako sprite na jeho 1,1 dlaždice.

a môžete vidieť čiaru, ktorá začína na začiatočnom ťahu špirála a končí v cieľovom bode kreslenia sprite.

Teraz moja otázka je, ako môžem urobiť, aby sa ten sprite pohyboval na ceste tejto línie, takže to bude vyzerať tak, ako sa loď pohybuje dopredu?

Takže hlavným pojmom je otázka.. Ako môžete urobiť sprite pohyb v priamke, od miestneho bodu k cieľu?

Niektoré funkcie, ktoré možno potrebujete vidieť:

public int getIsometricX(int x, int y, TextureRegion region) {
return (x * GameTile.TILE_WIDTH / 2) - (y * GameTile.TILE_WIDTH / 2) - (region.getRegionWidth() / 2);
}

public int getIsometricY(int x, int y, TextureRegion region) {
return (x * GameTile.TILE_HEIGHT / 2) + (y * GameTile.TILE_HEIGHT / 2) - (region.getRegionHeight() / 2);
}

Dlaždice sú nakreslené rovnakou metódou, len s textúrou dlaždíc.

odpovede:

1 pre odpoveď č. 1

Rád by som odpovedal na túto otázku, pretože ostatní ľudia by mohli mať rovnakú záležitosť a skôr ju komplikovali ako ja.

Ak chcete vykonať akýkoľvek pohyb na vašej izometrickej mape, nedodržujte moje nedorozumenia a vypočítajte ju na izometrických súradniciach.

Musíte ju vypočítať na súradniciach matice s plochou obrazovkou a potom ju previesť na izometrické súradnice.

Napríklad, chcem sa pohybovať hore ako tento riadok, všetko, čo musím urobiť, je toto:

ship.y += 0.1f // when it reaches 1, then it will be at 0, 1

Takže viete, že chcete byť 0,1 na vašej neizometrickej mape.

Takže urobíte tento prírastok, a potom naposledy, musíte ho pred výkresom previesť na izometrické súradnice:

float x = (ship.x * GameTile.TILE_WIDTH / 2) - (ship.y * GameTile.TILE_WIDTH / 2) - (textyure.getWidth() / 2);

float y = (ship.x * GameTile.TILE_HEIGHT / 2) + (ship.y * GameTile.TILE_HEIGHT / 2) - (texture.getHeight() / 2);

A to bude kresliť na izometrickej mape, presne tak ako na obrazovke, ale v izometrickom formáte.


0 pre odpoveď č. 2
for(float x : new float[targetx - currentx]) {ship.setPosition(ship.getX + x, ship.getY); }

A urobíte to isté pre vás.

edit:

Myslím, že je to zlé, pretože voláte na každý rámček, ktorý predpokladám.

Namiesto toho by ste sledovali vašu vzdialenosť prejdená medzi cieľovou a loďou a zvýšili by ste pozíciu sipu o 1 každý krát na x a y, až kým nedosiahne vzdialenosť.


Najpopulárnejší