Hintergrund Z-index / Scene-Dimensions

  • #1, by rhavin grobertFriday, 03. November 2017, 23:12 6 years ago
    I have 3 Planes:

    -1 scrolling background animation (jpeg, about 20% of actual scenes width, x-repeating via lua)
    0 actual scene backgrund (alphatransparent png)
    1 scene foreground (alphatransparent png)

    How do i setup this? Im missing any Z-coordinate…

    What I can do is set a scene background and it seems to take the scenes dimensions from this background-image. As this image (Z-index 0) is going to get scrolled a bit, I need the actual scene smaler in x-direction than the image.

    Also, how do I move a png behind the background? (where is z?)

    ======

    Ih hab 3 Ebenen

    -1 bewegliche hintergrund-animation (Jpeg, 20% der Szenenbreite, soll sich in x per lua wiederholen)
    0 richtiger Szenen-Hintergrund (alphatransparent png)
    1 Szenen-Vordergund (alphatransparent png)

    Ich find aber keine Z-Koordinate.

    Wie kann ich bei einer Szene die Größe einstellen? Die muss kleiner sein als das Hintergrund-Bild. Und falls Ebene 0 als Hintergrund-Bild nehmen muss – wie packe ich ein Objekt hinter en Hintergrund? (wo ist Z)

    Newbie

    47 Posts


  • #2, by sebastianFriday, 03. November 2017, 23:53 6 years ago
    Nutze den Hintergrund  als reine Dimensionierung deiner Szene. 
    Lege dann in der Objektliste deine "richtigen" Hintergründe an: 
    1. Objekt: Hintergrund: Objekt Zentrum auf "0" stellen. Somit wird der Charakter immer davor angezeigt, sofern er sich unterhalb befindet (wäre dämlich, wenn er  oben aus dem Bild laufen könnte)
    2. Objekt: Ebenfalls ein Hintergrund mit PNG alphatransparenz. Objektzentrum ebenfalls auf 0.
    3. Objekt: Vordergrundobjekt mit Objektzentrum = Spielauflösung.Y oder höher (CHarakter wird immer dahinter angezeigt.

    Ziwchen 2 und 3 können natürlich auch noch Objekte zum drumherumlaufen gesetzt werden.

    Thread Captain

    2346 Posts

  • #3, by rhavin grobertSaturday, 04. November 2017, 00:47 6 years ago
    Ich erstelle also ein schwarzes Bild, nur um zwei Koordinaten an eine Szene zu übergeben. Naja, is ja erst ein Release-Candidate XD

    Cool, danke, nächstes Problem: *g*

    Der Lua-Pfad zu meinen Hintergrund is

    Scenes.UBahnWagen1.Objects.Tunnel0

    Laut Doku hat das Objekt einen ObjectOffset t_point, wenn ich nun also bei beginn der Scene ausführen lasse:

    Scenes.UBahnWagen1.Objects.Tunnel0.ObjectOffset.x = 300

    passiert nüscht, klebt immer noch bei 0 am linken rand. Auch mit ObjectPosition passiert nix. Wie beweg ich das Teil?

    Newbie

    47 Posts

  • #4, by sebastianSaturday, 04. November 2017, 01:07 6 years ago
    Die Szenendimensionen werden halt anhand des Hintergrundbildes festgelegt. Das ist seit v1 so und hat nichts mit RC zu tun. Ist da eher ne Philosophiesache wink (wäre auch dynamischer, wenn man es durch Eingabefelder machen würde, aber es ist generell auch nicht unbedingt ein Nachteil, so wie es jetzt ist).

    Zum neuen Problem:

    Ein t_point ist eine kombination aus x und y. Es kann sein, dass man die werte nur gesamt ändern kann 

    tunnel = Scenes["UBahnWagen1"].Objects.Tunnel0
    tunnel.ObjectOffset = {x=300, y=tunnel.ObjectOffset.y} 

    EDIT: ein paar korrekturen vorgenommen.


    Thread Captain

    2346 Posts

  • #5, by rhavin grobertSaturday, 04. November 2017, 02:14 6 years ago
    tunnel.ObjectOffset = {x=300, y=tunnel.ObjectOffset.y} 


    WindowResolution is ja auch 'n t_point, da gehts auch mit x und y.

    Ich hab mir grad mal die Codebeispiele durchgelesen, leider wird der Fall nicht behandelt XD

    https://www.visionaire-studio.net/book/visionaire-studio-han...

    Jedenfalls, mit ObjectOffset= {x=…,y=…} bewegt sich zumindest was, hat nur leider nix mit den Pixels zu tun. die Hintergrund-Bildchen sind exakt 913px breit, mit…

    Scenes.UBahnWagen1.Objects.Tunnel0.ObjectOffset = {x=0,y=0}
    Scenes.UBahnWagen1.Objects.Tunnel1.ObjectOffset = {x=913,y=0}
    Scenes.UBahnWagen1.Objects.Tunnel2.ObjectOffset = {x=1826,y=0}

    …sollten sie also direkt aneinander stossen. Tun sie aber nicht. Da sind um die 50px Differenz . Ich würd ja 'n Screenshot schicken, aber [Strg][Druck] geht auch nicht XD

    Newbie

    47 Posts

  • #6, by sebastianSaturday, 04. November 2017, 09:13 6 years ago
    ok... Alternativ könntest du anstatt eines einzelnen Hintergrundbildes dem Objekt eine 1Frame Animation als Standardanimation geben (loop), die du per Lua :to Funktion in "X" ms auf eine neue Position schiebst.

    ActiveAnimations["name"]:to(delay, { AnimationCurrentPosition = {x = 500, y = 500} }, easing)

    name=Name ser Animation 
    delay=Zeit in ms
    easing=Easingmethode (optional) 




    Das Ganze in eine "Called by other action" Aktion, danach eine Pause mit derselben Zeit wie "delay", nochmals die gleich Luafunktion mit delay "0"und der Originalposition zum zurücksetzen und einem "Jump to Action part #1", so das sich das wiederholt. 

    In der beginning of scene Aktion dann einfach diese aufrufen (und beim beenden ggf. beenden) 

    Thread Captain

    2346 Posts

  • #7, by rhavin grobertSaturday, 04. November 2017, 18:36 6 years ago
    Oh mann … D

    Sorry, dass ich hier etwas genervt klinge, aber mich nevt die software auch grad etwas ab, dennoch vielenvielen dank, das Du helfen willst. Anscheindend sind die Values, die ich hier eingebe, relativ zu der ursprünglichen Positionierung, was ja prinzipiell OK ist, wenn ich nur wüsste, wie ich die ursprüngliche Positionierung (am besten dynamisch) erzeugen kann. Ich kann die Bildchen zwar mit der Maus hin und herschieben, aber so kann ich nicht pixelgenau arbeiten. Das muss doch irgendwo eingebbar sein? Ich brauch an anderen Stellen teilweise 6 mal 3 Bilder, die exakt positioniert werden sollen.

    Der Tunnel sieht im xml so aus:
    ‹Object name="Tunnel2" id="70" order="4" lastModified="1" ObjectDirection="-1" ObjectCenter="815" ObjectIsItem="F" ObjectConditionNegate="F" ObjectIsWalkable="F" ObjectScrollFactorX="100" ObjectScrollFactorY="100" ObjectModel="" ObjectValueOperator="-1" ObjectValueInt="-1"›
    
       ‹ObjectName parentLink="T" id="201" tableId="14" LinkAny="F"/›
    
       ‹ObjectPolygon›
    
       ‹/ObjectPolygon›
    
       ‹ObjectCondition parentLink="F" id="-1" tableId="-1" LinkAny="F"/›
    
       ‹ObjectSprite parentLink="T" id="111" tableId="13" LinkAny="F"/›
    
       ‹ObjectAnimation parentLink="F" id="-1" tableId="-1" LinkAny="F"/›
    
       ‹ObjectActions›
    
       ‹/ObjectActions›
    
       ‹ObjectConditions›
    
       ‹/ObjectConditions›
    
       ‹ObjectAnimations›
    
       ‹/ObjectAnimations›
    
       ‹ObjectValues›
    
       ‹/ObjectValues›
    
       ‹ObjectPosition x="0" y="0"/›
    
       ‹ObjectParticleSystem parentLink="F" id="-1" tableId="-1" LinkAny="F"/›
    
       ‹ObjectSnoopAnimation parentLink="F" id="-1" tableId="-1" LinkAny="F"/›
    
       ‹ObjectSnoopAnimationPos x="0" y="0"/›
    
       ‹ObjectValue parentLink="F" id="-1" tableId="-1" LinkAny="F"/›
    
      ‹/Object›  

    Was davon ist die Objektposition? Das naheliegende ("Objektposition" isses nicht, das ist Targetpostion - da, wo die Figur hingeht)

    Ich würd gern per Lua einfach 'sagen':

    local obj = createObject(scenenName)
    obj.filePath = path
    obj.x = 913
    obj.y = 0
    
    usw.

    Newbie

    47 Posts

  • #8, by rhavin grobertSaturday, 04. November 2017, 18:52 6 years ago
    Ok habs gefunden (völlig andere Stelle im File):

      ‹Sprite name="Bild" id="111" order="111" lastModified="1"›
    
       ‹SpriteSprite name="" pause="-1" path="Kulissen/UBahn/Tunnel2.jpg" Transparency="2"›
    
        ‹position x="193" y="2"/›
    
       ‹/SpriteSprite›
    
      ‹/Sprite›

    Dieses Tag 'position' is das Problem. Und leider is Sprite nicht als scriptable markiert. Sieht so aus, als werde ich unser Spiel hauptsächlich mit einem XML-Editor erstellen grin -.-

    Newbie

    47 Posts

  • #9, by sebastianSaturday, 04. November 2017, 20:48 6 years ago
    mach mal lieber das mit der Animation. Dafür sind die da razz

    Thread Captain

    2346 Posts

  • #10, by rhavin grobertSaturday, 04. November 2017, 22:15 6 years ago
    Gut, das mit der Ani hab ich nicht so ganz verstanden. Sieht z.Z. so aus:




    Hintergrund und Vordergrund des U-Bahn-Wagens, Vordergrund scrollt mit 110%. Bei Start wird, um die Cam auf die Person festzunageln, ausgeführt:
    game.GameHorizontalScrollDistance = (game.WindowResolution.x / 2)
    
    game.GameVerticalScrollDistance = (game.WindowResolution.y / 2)
    

    außerdem hab ich 3 Hintergrund-Tiles:



    Tile 0 solle immer abwechseln mit (zufällig) Tile 1 (66% säule dunkel) und Tile 2 (33% säule mit Licht). Das soll als Kette im Hintergrund vorbeirauschen, damit man es durch die Fenster und außerhalb des Wagens sieht.

    Als starter hab ich im XML-File erstmal die positionen auf exakt 0,0 gesetzt und kann die Tiles mit…:
    Scenes.UBahnWagen1.Objects.Tunnel0.ObjectOffset = {x=0,y=0}
    Scenes.UBahnWagen1.Objects.Tunnel1.ObjectOffset = {x=913,y=0}
    Scenes.UBahnWagen1.Objects.Tunnel2.ObjectOffset = {x=1826,y=0}

    …bündig aneinanderklateschen. Ne Funtion zu basteln, die mir in Lua für ›Tile nummer irgendwas‹ ne 0, 1 oder gelegentlich 2 zurückliefert, is auch trivial. Meine erste Idee war, je nach Zustand in den 3 Objekten den ObjectSprite-Parameter zu verändern, da eh nur immer 2 und 'n bischen gleichzeitig zu sehen sind, nur leider ist der (D'oh!) nicht skripbar XD

    Also dachte ich mit 4 objekten zu arbeiten (zweimal Tile 0) und die nach Bedarf zu positionieren.

    Aber welchem dieser Objekte geb ich jetzt die Animation?

    Newbie

    47 Posts

  • #11, by sebastianSaturday, 04. November 2017, 23:18 6 years ago
    Folgendes (ich schreibs mal in Englisch, damit auch ggf. andere Leute hier im Forum helfen können):



    Scene: Background of the scene: Black, used to dimensionate the scene,
    Object1: "animated_bg", containing 3 objekt animations: 
        1: "tunnel0", 1 Frame with image 1 , Loops [x], infinite , 
        2: "tunnel1" , 1 Frame with image 2 , Loops [x], infinite ,
        3: "tunnel2", 1 Frame with image3 , Loops [x], infinite ,
    Object2: train background
    Object3: train foreground

    The animations from object 1 can be put stacked outside of the viewable scene. These animations will be moved via Lua.

    SCENE ACTIONS:
    ------

    At beginning of Scene Action:
    Show animation: tunnel0
    Show animation: tunnel1
    Show animation: tunnel2
    Call other Action: "movebackground" (will be created below)
    (there is also an earthquake action part which is maybe usefull in the lowest setting to simulate the train jiggle)
    -------

    Called by other Action "movebackground":

    Actiopart #1 : Execute a script:
    --reset animations in 0ms to pos 0/0 
    ActiveAnimations["tunnel0"]:to(0, { VAnimationCurrentPosition = {x = 0, y = 0} }) 
    ActiveAnimations["tunnel1"]:to(0, { VAnimationCurrentPosition = {x = 0, y = 0} }) 
    ActiveAnimations["tunnel2"]:to(0, { VAnimationCurrentPosition = {x = 0, y = 0} })  
    --randomize a number between 0 and 2
    local randomtunnel = math.random(0,2)
    --move random tunnel animation to other side of the screen in 500ms (assuming x=2000 is outside the view)
    ActiveAnimations["tunnel"..randomtunnel]:to(500, { VAnimationCurrentPosition = {x = 2000, y = 0} }) 
    Actionpart #2: Pause 500ms
    Actionpart #3 Jump to Actionpart #1



    This should randomly move one animation from tunnel0-2 from 0/0 to 2000/0 in 500ms and looping that stuff.
    You should consider that it may looks better if your "real" background is entirely black and your tunnel0-2 animation images are fading into black at the left/right edges, Then you can do a bigger pause, so that the tunnel images appear in greater distance.

    ------
    ADDITIONAL SCENE ACTION to quit all processes which are relevant.
    At end of Scene Action:
    Hide animation: tunnel0
    Hide animation: tunnel1
    Hide animation: tunnel2
    Quit action: "movebackground"


    ------
    (untested)

    kind regards
    Sebastian



    Thread Captain

    2346 Posts