dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Jautājumi par isometric tiles.
Goto page Previous  1, 2
 
dev.gamez.lv Forum Index -> Iesācējiem
View previous topic :: View next topic  
Author Message
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: Thu Jan 29, 2009 7:20 pm    Post subject:

Code:

while running:
    img.clear()
    for x in listAll:
        for y in listAll:
            img.blit(tile, target=(x,y), mask=tilem)
    handle_redraw(())

Tagad viss strādā lieliski, tagad bija doma izveidot kameras kustināšanu vienkārši mainot tailu koordinaatas kad notiek kustība, bet re ka nevar mainīt x vai y koordinaatas jo tas skaitās kā lists, ir kāds veids kā visiem lista lementiem pieskaitīt/atņemt ciparus vienlaikus?
Biju domājis ka atkal ar cikliem bet šis tas nesanāca.
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Jan 29, 2009 7:29 pm    Post subject:

Kāpēc tu gribētu visiem kautko skaitīt klāt?
Ievies kameras koordinātes - cameraX, cameraY. Un tad attiecīgi, renderējot tailus, vai nu skaiti klāt šos mainīgos pie taila koordinātēm, kad tev vajag dabūt taila pasaules koordināti no taila koordinātes uz ekrāna, vai arī atņem no taila koordinātēm, kad tev vajag no pasaules koordinātes dabūt ekrāna koordināti.
Back to top
View user's profile Send e-mail
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: Fri Jan 30, 2009 6:29 pm    Post subject:

Nu dabūju nelielu kodu, itkā strādā, bet ne gluži
Code:

camX=0
camY=0

while running:
    img.clear()
    for x in listAll:
        for y in listAll:
            img.blit(tile, target=(camX - x,camY - y), mask=tilem

Par cik x un y ņem koordinātas no lista, tad arī nesanāk atņemt šos mainīgos no camX/camY, Python shell saka:
Quote:
TypeError: unsupported operand type(s) for -: 'int' and 'list'

Bet ja ņemu vienkāršu mainīgo/skaitli viss strādā.
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Jan 30, 2009 8:15 pm    Post subject:

Nesapratu. x tev ir kas? Es biju domājis integers vai floats.
Tā kā camX arī ir int, tad atņemšanai tur tev ir jāstrādā.
Kas tad tev ir tajā listAll iekšā?
Back to top
View user's profile Send e-mail
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: Fri Jan 30, 2009 8:42 pm    Post subject:

listAll iekšā ir visas x un y koordinātas kuras nolasu no faila
Code:

mapfile = file(u"E:\\map1.txt", "r+")
mapfile.seek(0)
listCoords=[]
listAll=[]
for line in mapfile:
    tilename, x, y = line.split(",")
    listCoords.append(int(x))
    listCoords.append(int(y))
    listAll.append(listCoords)
    listCoords=[]
#'tilename' pagaidām neizmantots...

while running:
    img.clear()
    for x in listAll:
        for y in listAll:
            img.blit(grasst, target=(x, y), mask=tilem)

    handle_redraw(())
    e32.ao_yield()

Bet šis kods ir līks jo izskatās ka zīmē stipri vairāk nekā vajadzētu.
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Jan 30, 2009 8:52 pm    Post subject:

Bez šaubām, ka līks. Kāpēc tu listAll liec iekšā x un y vērtību pārīšus, taču ciklā izmanto to gan x, gan y vērtībām?
Manurpāt tev vajag rakstīt sekojoši (ja pareizi saprotu tavu datu formātu):
Code:
for x, y in listAll:
  img.blit(...)
Back to top
View user's profile Send e-mail
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: Tue Jun 30, 2009 12:58 pm    Post subject:

Paldies, viss strādā. Smile
Kādu laiku nebiju neko darījis, bet te ir ~iznākums

Tagad tikai vajag lai obekti pareizā secībā zīmējas (nu piemēram ja player ir aiz koka tad lai nezīmējas virs koka)

Zīmēšanas kods:
Code:

while running:
 for tile, mask, cx, cy, cz in listAll:
   img.blit(dictTiles[tile], (0,0), (camx+cx,camy+cy), mask=dictMasks[mask])

tile - bildes nosaukums
mask - 'mask' nosaukums, lai tiles ir caurspīdīgi kur vajag
cx, cy - koordinātas
cz - nu lasīju ka vajag izmantot Z koordinātu tāpēc pieliku klāt

listAll izskatās aptuveni tā:
listAll=[[grass01,mask01,100,50,3],[sand01,mask01,200,100,4]]
Nezinu gan kā izmantot sort() šādā gadījumā, varbūt vienīgi likt Z katram listam iekš listAll sākumā un tad viss arī 'sortēsies' pēc Z koordinātas, ja nu vien varētu uzstādīt pēc kura lista elementa notiek sortēšana...

Vēl arī nav skaidrs kā tad īsti izmanto Z koordināti šajā gadījumā, vai tad tas pats y neder?
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Tue Jun 30, 2009 2:01 pm    Post subject:

Par z koordināti, kā to izmantot kodā, es jau uzrakstīju #2 postā. To vajag izmantot tikai tad, ja tev viena taila pozīcijā varēs atrasties vairāki spraiti. Ja tā nav, tad pilnīgi pietiks, ja zīmēsi no ekrāna augšas uz apakšu, tb tailus sakārtotu pēc y koordinātes augošā secībā.

Pythona list klases sort metode saņem funkciju argumentā, kurātu vari definēt kārtošanas kritēriju kā vien tev patīk. Lasi dokumentāciju vai, piemēram, šo: http://wiki.python.org/moin/HowTo/Sorting
Back to top
View user's profile Send e-mail
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: Wed Jul 01, 2009 3:06 pm    Post subject:

Paldies, pamēģināšu. Smile
Tikai vēl es nesaprotu kā ar to sort lai dara,
domāju, ka jāskatās pēc šī piemēra
Code:

a.sort(key=str.lower)

Taču kā lai šo 'key' lieto kā lista elementa numuru?
Ienāk prātā kkas tāds
Code:

a.sort(key=int.[2])
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Jul 01, 2009 3:14 pm    Post subject:

Nē, tev jāskatās uz piemēru, kurā lambda:
Code:
a = [(1,6), (3,5), (10,2)]
a.sort(cmp = lambda x, y: x[1]-y[1])
print a # izvadīs [(10,2), (3,5), (1,6)]

Šis kārtos tikai skatoties uz katra tupļa otro elementu.
Back to top
View user's profile Send e-mail
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: Thu Jul 02, 2009 1:37 pm    Post subject:

Šis kods izmet ārā
"TypeError: sort() takes no keyword arguments"

Varbūt s60 Python'am nemaz nav tādas iespējas?
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Jul 02, 2009 1:44 pm    Post subject:

Kāda Python versija tur ir?
Apskaties attiecīgās pitona versijas manuālī helpu par sort metodi list objektam. Tur redzēsi kādi argumenti ir jāpadod.
Back to top
View user's profile Send e-mail
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: Thu Jul 02, 2009 1:47 pm    Post subject:

Laikam nesanāks
Quote:
Python 2.4 adds three keyword arguments to sort() that simplify many common usages: cmp, key, and reverse

Uz Symbian jaunākais Python ir 1.9.6, iznāca tikai vakar vai aizvakar, es pats vispār uz 1.4.5 esmu, mēģināšu uzlikt jaunāko.

whoops, jaunā versija izskatās derēs, paskatīšos
Quote:
The new PyS60 version is the latest update for development series of PyS60, which is now based on the new Python 2.5.4 core and brings more opportunities for Python developers and the end users as well.
Back to top
View user's profile Send e-mail
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: Sat Jul 04, 2009 3:20 pm    Post subject:

Viss strādā

AR to kārtošanu gan viss sanāca vēl vienkāršāk, listAll kurā ir visi dai, koordinātas, nosākuma sakārtoju ar sort() pēc y koordinātas un pēc tam to pašu listu pēc z koordinātas kuru ieguvu z=y+h un viss notiek. Smile
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Iesācējiem All times are GMT + 2 Hours
Goto page Previous  1, 2
Page 2 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group