Autor Zpráva
1Pupik1989
Profil
Zdravím, všechny uživatele diskuze.

Po dlouhé době jsem se rozhodl dodělat browser hru. Zůstal jsem ale zaseklý u rotace mapy. Mám zatím nastaveno 45° doleva a vykresluje se to dobře. Jenže nevím, jak udělat třeba rotaci o 60° a přepočet bitmapy. Tráva je jen bitmapa 600 x 600 px a při otočení o 45° má nastavenou poloviční výšku..

Jako návrh překládám obrázek a funkci na vykreslení stromů.



<?php
public function drawForest($showType,$array,$next = 4){
    for($y=0;$y<$this->num_arr;$y++){
      for($x=0;$x<$this->num_arr;$x++){
        
        if($showType=="3D"){
          $that_x = $x;
          $that_y = ($this->num_arr-1)-$y;
        }
        if($showType=="2D"){
          $that_x = $y;
          $that_y = $x;
        }
        if(isset($array[$that_x][$that_y])){
          if($showType=="3D"){
          
          $sin = sin($this->uhel);
          
            $off_left = $this->new_width-($this->new_width/2) - $y*$this->one_x + $x*$this->one_x + $this->padding/2;
            $off_top =  $this->padding/2+$x*$this->one_y + $y*$this->one_y - $this->one_y;// 50;

            $random = $this->padding/5;

            $img_s = $this->image["tree"][rand(0,6)];
            imagecopy($this->final_im,$img_s["im"],$off_left,$off_top,0,0,$img_s["width"],$img_s["height"]);

            if($next>0){
              for($i=0;$i<4;$i++){
                $rands = rand(0,6);
                $img_t = $this->image["tree"][$rands];
                imagecopy($this->final_im,$img_t["im"],$off_left+rand(-$random,$random),$off_top+rand(-$random,$random),0,0,$img_t["width"],$img_t["height"]);
              }
            }
          }elseif($showType=="2D"){
            $img = $this->image["tree"]["top"];
            imagecopy($this->im,$img["im"],$x*$this->one,$y*$this->one,0,0,$img["width"],$img["height"]);
          }
        }

      }
    }
  }
?>

Děkuji předem za jakoukoliv radu.
AM_
Profil
php funkci imagerotate() jsi zkoušel? že by čtvercová bitmapa měla po natočení poloviční výšku je dost divné - když otočíš čtverec o 45°, výška obrázku bude jeho úhlopříčka, tedy sqrt(2).
1Pupik1989
Profil
No samozřejmě použiji imagerotate, tím otočím mapu a pak zmenším výšku (naschvál), aby se mapa položila, jinak by byla shora.

Vlastně tu položenou mapu potřebuji otáčet kolem jejího středu.


Přesně tak, ale aby se točila. Střed je jasný, ten je vždy ve středu obrázku.

Bohužel veškerá logická úvaha mě nejspíš utekla na učilišti :D
AM_
Profil
Co takhle si mapu nejdřív otočit o požadovaný úhel a pak až teprve změnit výšku, abys nabyl efektu "položené mapy"?
1Pupik1989
Profil
To nevypada hezky, stane se z toho obdélník. U 45° to jde, ale třeba u 60° už to vypadá hodně blbě.

Nicméně vyřešil jsem rotováním v elipse. Nemůžu, ale přijìt na to, jak vypočítat další body na elipse. I bratr mi to vysvětloval, ale zjevně jsem tupÿ jako poleno.

Chtěl bych požádat nějakého moderátora, aby vlákno přehodil do javascriptu, pokračuji totiž v Canvasu.
Fisak
Profil
1Pupik1989:
neotáčel bych obrázky ale pouze bych je prohodil např. bych tvůj obrázek rozřezal na 4 různý čtverce a ty bych mezi sebou prohodil tak aby to nabylo dojem že se to prohodilo .. může se to řešit třeba souřadnicema :-)
1Pupik1989
Profil
Fisak:
Asi to moc nechápu. Chci aby se mi pole i s objekty otočilo třeba o 15° doprava. Jestli myslíš skoky o 90°, tak to by bylo celkem zbytečné.
Fisak
Profil
1Pupik1989:
aha ... o 15° je to horší.. jelikož třeba by pak ty stromy co máš na prvním obrázku byli tak podivně nakloněné...


jinak máš už někde nějakou ukázku této hry ? rád bych se podíval jak to vypadá :-)
1Pupik1989
Profil
Fisak: Ukázku zatím nemám, zkouším to zatím jen z disku.

Nicméně stromy už dokážu otáčet, ale nemůžu k tomu transformovat podklad (trávu). Otáčím ho stejně, ale to je tak vše :(
peta
Profil
1Pupik1989:
Muzes to udelat v gimpu, jak to ma byt?
Canvas ma tusim rotaci kolem stredu a rotaci do prostoru. Tusim je treba mit nastaveny spravny typ canvasu jako 2d a 3d.
Cili, pokud chces mapu rotovat klasickym zpusobem, tak ji porotujes jako ctveres a pak sklopis do prostoru.
[==] ... /\ ..
[==] ... \/ ..<>
Sklopenou verzi uz nema smysl rotovat.

Googlem jsem nasel na jednom foru pekne odkazy, treba tento se mi libi. Hlavne se mi libi vyplnovat jeste to policko pri otaceni :)
http://www.addyosmani.com/resources/googlebox/
http://stackoverflow.com/questions/9155001/apply-2d-canvas-image-text-to-3d-surface-and-do-360-degree-rotation-animatio
1Pupik1989
Profil
Prozatím jsem to tak nějak vyřešil. Mám dva Canvasy přes sebe, nic moc elegantního, ale stačí. Horší už bude posouvání mapy. Musím zjistit, kde se bude přidávat další souřadnice.

Jinak ukázka :zde

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: