Právě je sob lis 23, 2024 4:16 pm

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 10 ] 
Autor Zpráva
 Předmět příspěvku: Nacitani kamey po prichodu z jine sceny
PříspěvekNapsal: čtv říj 13, 2011 12:10 pm 
Offline
..
..

Registrován: čtv říj 06, 2011 12:14 am
Příspěvky: 22
Zdravim, tak jsem narazila na dalsi problem. Sice jsem to vyresila ale zda se mi to jako dost krkolomne reseni. Mam vymodelovanou chodbu a z ni vedou dvere do jinych mistnosti, ktere jsou vymodelovane v jinych scenach. Kamery mam umistene prede dvermi, abych je pri vraceni se zpet na chodbu mohla nacist tak, jako bych z tech dveri vysla. Ale kdyz jsem presla z mistnosti zpet na chodbu nacetla se aktivni kamera (tj. ta prvni se kterou jsem se zacala pohybovat na zacatku chodby) chtela jsem nacist tu kameru prede dvermi. Tak jsem to resila tak, ze jsem kazdym dverim nastavila jinou hodnotu propojila sceny scenou, ktera bezi na pozadi, aby si pamatovala cislo mistnosti do ktere jsem vesla a nastavila na aktivni kamere, ze kdyz hodnota bude treba 1, tak se prepne na konkretni kameru. Ale zda se mi to jako dost zaludne reseni. Navic kdyz se prepina kamera na tu prede dvermi, tak tam problikne uplne ta prvni, coz se mi taky nelibi. Nenapada vas nekoho jak by se to dalo nejak elegantne resit? Poprípade nejaky tutorial? Docela jsem googlila ale nic moc jsem nenasla.


Nahoru
 Profil  
 
PříspěvekNapsal: čtv říj 13, 2011 7:05 pm 
Offline
...........
...........
Uživatelský avatar

Registrován: sob zář 18, 2004 4:13 pm
Příspěvky: 1898
Bydliště: Slovensko, Bratislava
Bez python scriptu to nepôjde.
Spravil som nástrel systému.

Ide o toto:
Každé dvere z ktorých môžeš prísť majú pri sebe empty objekt, podľa ktorého sa nastaví kamera pre prechode do tejto scény(pozícia,orientácia).
Tieto Empty majú premenné door, slúži na pomenovanie konkrétnych dverí.

Dvere majú 2 premenné.
Scene - to je scéna do ktorej sa dostaneš keď cez ne prejdeš
Door - to je názov v premennej konkrétneho empty v tej scéne(viď. hore). Podľa toho sa vyberá v ďalšej scéne že cez ktoré dvere si vyšla.

Dôležité scripty sú:
load - po načítaní scény nastavuje pozíciu a rotáciu kamery.
vstup - vykonáva sa pre prechod dvermi

mouse a move mám len pre pohyb kamery.

Blend

ovládanie:
w,s,a,d,myš
klik pre vstup do dverí.


Nahoru
 Profil  
 
PříspěvekNapsal: sob říj 15, 2011 9:20 pm 
Offline
..
..

Registrován: čtv říj 06, 2011 12:14 am
Příspěvky: 22
Nez se zacnu ptat, chtela jsem vas tady pochvalit za rady ktere rozdavate. Jste opravdu hodni ze tady lidem pomahate. No a ted k tomu problemu. nevim proc mi nejede zadny skript, ktery nekde najdu a zkusim zapsat. Ten skript na pohyb kamery jsem predelala na:
import bge

def main():

cont = bge.logic.getCurrentController()
own = cont.owner

print (own.position.x)

up = b.sensors["up"]
down = b.sensors["down"]
left = b.sensors["left"]
right = b.sensors["right"]

move = b.actuators["move"]

loc = [0,0,0]
rot = [0,0,0]

if(up.positive):
loc[2] = -0.05

if(down.positive):
loc[2] = 0.05

if(left.positive):
rot[0] = -0.05

if(right.positive):
rot[0] = 0.05


move.useLocalDLoc = True
move.UseLocalDRot = False
move.dRot = rot
move.dLoc = loc

cont.activate(move)

main()

ale vubec to nereaguje. Nastavila jsem i v Logic Editoru ty sensory a propojila s tim skriptem a jednim Actuatorem pro pohyb. Videla jsem par tutorialu a maji to dost podobne. Nekde jsem cetla ze v blenderu 2.5x jsou jine moduly a tak to mozna nejde kvuli tomu. Chybu mi to hlasi uz u 5. radku u cont. Ale nikde jsem nenasla jak bych to teda mela opravit. Nebyla by nejaka rada? Predem moc dekuji.


Nahoru
 Profil  
 
PříspěvekNapsal: ned říj 16, 2011 10:39 am 
Offline
...........
...........
Uživatelský avatar

Registrován: sob zář 18, 2004 4:13 pm
Příspěvky: 1898
Bydliště: Slovensko, Bratislava
Nabudúce treba povedať pre akú verziu blenderu to chceš.
Defaultne posielam riešenia pre 2.49b.

Tento konkrétny script nejde, pretože nemá žiadne odsadenie riadkov.
Iné jazyky majú pre členenie kódu špeciálne znamienka ako {}.
Python to rozlišuje len : pre začiatok + odsadenie (tab) kódu ktorý patrí do danej časti.
Mala by si si naštudovať základy pythonu.

Ďalej máš chyby na riadku 11-16.
Premenná b neexistuje. To malo byť cont.
up = cont.sensors["up"]
Tiež nemáš odsadený kód pod if.
Na riadku 35 máš preklep s veľkým U. má tam byť malé(move.useLocalDRot = False).

Po úprave by to malo byť správne takto:
Kód:
import bge

def main():

    cont = bge.logic.getCurrentController()

    own = cont.owner

    print (own.position.x)
   
    up = cont.sensors["up"]
    down = cont.sensors["down"]
    left = cont.sensors["left"]
    right = cont.sensors["right"]
   
    move = cont.actuators["move"]
   
    loc = [0,0,0]
    rot = [0,0,0]
   
    if(up.positive):
        loc[2] = -0.05
   
    if(down.positive):
        loc[2] = 0.05
   
    if(left.positive):
        rot[0] = -0.05
   
    if(right.positive):
        rot[0] = 0.05
   
   
    move.useLocalDLoc = True
    move.useLocalDRot = False
    move.dRot = rot
    move.dLoc = loc
   
    cont.activate(move)

main()


Nahoru
 Profil  
 
PříspěvekNapsal: ned říj 16, 2011 11:46 am 
Offline
..
..

Registrován: čtv říj 06, 2011 12:14 am
Příspěvky: 22
Ja vim ze se musim podivat na zaklady pythonu, ale psali python 3.x je hodne odlisny od 2.x, tak jsem hledala ruzne stranky a ty co jsem nasla byly predevsim pro 2.x Neznas nejake slusne pro verzi 3.x? Mam blender 2.59 a python 3.2. a rada bych se naucila delat skripty pro blender. Dekuji


Nahoru
 Profil  
 
PříspěvekNapsal: ned říj 16, 2011 11:59 am 
Offline
...........
...........
Uživatelský avatar

Registrován: sob zář 18, 2004 4:13 pm
Příspěvky: 1898
Bydliště: Slovensko, Bratislava
Mne pomohla kedysi táto stránka: http://www.py.cz/FrontPage

Je pravda že v pythone už takmer nerobím, maximálne v blenderu, ale pokiaľ používa blender 2.5x python 3.x, tak som si toho okrem
print "hello" a print("hello") vôbec nevšimol.

Edit:
Pri uční možno pomôže môj starý tutoriál: viewtopic.php?f=39&t=7351


Nahoru
 Profil  
 
PříspěvekNapsal: pon říj 17, 2011 11:04 pm 
Offline
..
..

Registrován: čtv říj 06, 2011 12:14 am
Příspěvky: 22
Tak uz jsem ty skripty snad i pochopila...jen nevim co presne dela ve skriptu VSTUP tenhle kus kodu
scene.scene = ob["scene"].

A pak mam problem s tim ze se mi nepozicuji ty kamery. Cili ve skriptu LOAD. V tomhle skriptu mi neni jasna podminka
if(o.name[0:9] == "OBcam_poz"):
a myslim ze tady je i zakopanej pes. Po tehle podmince se nestane nic. Nechala jsem si tam i vypsat text a ani tuk.

Budu rada za nejakou dalsi radu. Dekuji.


Nahoru
 Profil  
 
PříspěvekNapsal: úte říj 18, 2011 10:03 am 
Offline
...........
...........
Uživatelský avatar

Registrován: sob zář 18, 2004 4:13 pm
Příspěvky: 1898
Bydliště: Slovensko, Bratislava
scene.scene = ob["scene"]

prvá scene - je to actuator scene ktorý sa definoval na 8-mom riadku(scene = cont.actuators["scene"])

druhá .scene - je premenná(pole) v tom actuatoru(SCE:), scriptom sa zadáva hodnota.

ob["scene"] - ob je objekt na ktorý ukazuje ray senzor(čiže dvere), ktoré majú premennú scene(meno sceny do ktorej sa cez dvere dostaneme)


if(o.name[0:9] == "OBcam_poz"): - ak sa začiatok mena zhoduje s "OBcam_poz".
Tu je možno problém že ak to spúšťaš v blenderu 2.5, tak tam sa tuším objekty volajú už bez OB,
takže stacňči prepísať na:
if(o.name[0:7] == "cam_poz"):

Teraz pozerám, že keď som si otvoril ten blend z 2.49 v 2.5, tak blender prepíše sám scripty.
Len škoda že zle.
Pred tým čo si posielala kód že ti nejde, tak to bolo tým že to blender 2.5 blbo prepísal. (up = b.sensors["up"] a podobne blbosti).

Radšej som to prepísal pre blender 2.5.
Tu je blend: http://www.z-zone.ic.cz/tmp/sceny_25.zip


Nahoru
 Profil  
 
PříspěvekNapsal: sob říj 29, 2011 4:40 pm 
Offline
..
..

Registrován: čtv říj 06, 2011 12:14 am
Příspěvky: 22
Ahoj, tak uz jsem to domodelovala. A narazila jsem na problem. Kdyz uz funguje aby se ty kamery pozicovaly podle toho empty objektu, tak jsem chtela kdyz budu mit v jedne scene 2 mistnosti, aby se kamera z te v jedne prepla na kameru v te druhe scene. Myslela jsem si ze to pujde snadno podle toho skriptu VSTUP.

import bge

def main():

GL = bge.logic
cont = GL.getCurrentController()
own = cont.owner

ray = cont.sensors["ray"]
lmb = cont.sensors["lmb"]

scene = cont.actuators["scene"]


#ak som vosiel do dvery
if(ray.positive and lmb.positive):
ob = ray.hitObject

#nastav scenu podla dveri a vstup do nej

GL.door_name = ob["door"]

scene.scene = ob["scene"]

cont.activate(scene)

#ikona
msg = cont.actuators["msg"]
if(ray.positive):
msg.subject = "icon_on"
else:
msg.subject = "icon_off"
cont.activate(msg)

main()

Myslela jsem si, ze kdyz predelam Actuator "scene"...ze Set Scene na Set Camera, tak ze kdyz pak v property predelam nazev sceny na nazev kamery, ze se normalne preda v Actuatoru a prepne se. Ale... scene.scene = ob["scene"]... tenhle kousek kodu asi nefunguje pro predani na set camera. Nejde to timhle zpusobem vubec, nebo staci prepsat ten kousek kodu?

Dekuji predem za odpoved


Nahoru
 Profil  
 
PříspěvekNapsal: sob říj 29, 2011 7:25 pm 
Offline
...........
...........
Uživatelský avatar

Registrován: sob zář 18, 2004 4:13 pm
Příspěvky: 1898
Bydliště: Slovensko, Bratislava
Pretože pokiaľ je actuator scene typu setCamera, tak premenná do krotej píšeš názov kamery sa volá camera, nie scene.

Kód:
cam = cont.actuators["Camera nazov actuatoru"]
cam.camera = "meno kamery na ktorú chceš prepnúť"
cont.activate(cam)


Takže správne by si to mala mať:

scene.camera = ob["scene"]


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 10 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 4 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
cron
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz