+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 20 von 54

Thema: Objekt drehen

  1. #1
    Bäcker Avatar von Marius94
    Registriert seit
    30.07.2008
    Beiträge
    662

    Frage Objekt drehen

    Hallo,
    ich möchte ein Objekt (D_X_Harbour_FootBridge03) laaangsaam drehen (nicht mit einem mal).
    Ich habe mit KuschelUschi schon festgestellt, dass sich Objekte(also alles was nicht settler, oder sonstwie beweglich ist)weder mit
    Logic.SetOrientation(entity, orientation) noch mit Logic.RotateEntity(entity, orientation) drehen kann.
    Also: entity destroyen, und mit gewünster orientation neu setzen.

    Ich habe eine funktion geschrieben, die ein Objekt langsam drehen soll, nur leider bewegt sie das Objekt mit einem mal........ Sie basiert auf SimpleJobEx, der ja eigentlich nur jede sekunde ausgeführt wird. Also, warum dreht sich das ding dann so schnell?:
    Code:
    function DrehMich(_entity, _AufWievielGrad, _Richtung)-- _Richtung: 1 im Uhrzeigersinn 2 gegen Uhrzeigersinn
        local entity = GetEntityId(_entity);
        local _orientation = Logic.GetEntityOrientation(entity);
        local _entityType = Logic.GetEntityType(entity)
        local _newOri = _orientation
        if _orientation < _AufWievielGrad and _Richtung == 1 then
            StartSimpleJobEx(function()
                print (_newOri)
                _newOri = _newOri -0.5
                ReplaceEntity( _entity, _entityType, _newOri)
                if _newOri <= 2 then
                    _newOri = 359
                elseif _newOri <= _AufWievielGrad then
                    ReplaceEntity( _entity, _entityType, _AufWievielGrad)
                    return true
                end
            end)
        elseif _orientation < _AufWievielGrad and _Richtung == 2 then
            StartSimpleJobEx(function() 
                print (_newOri)
                _newOri = _newOri +0.5
                ReplaceEntity( _entity, _entityType, _newOri)
                if _newOri >= _AufWievielGrad then
                    ReplaceEntity( _entity, _entityType, _AufWievielGrad)
                    return true
                end
            end)
            
        elseif _orientation > _AufWievielGrad and _Richtung == 1 then
            StartSimpleJobEx(function() 
                _newOri = _newOri -0.5
                ReplaceEntity( _entity, _entityType, _newOri)
                if _newOri <= _AufWievielGrad then
                    ReplaceEntity( _entity, _entityType, _AufWievielGrad)
                    return true
                end
            end)
        elseif _orientation > _AufWievielGrad and _Richtung == 2 then
            StartSimpleJobEx(function() 
                _newOri = _newOri +0.5
                ReplaceEntity( _entity, _entityType, _newOri)
                if _newOri >= 359 then
                    _newOri = 1
                elseif _newOri >= _AufWievielGrad then
                    ReplaceEntity( _entity, _entityType, _AufWievielGrad)
                    return true
                end
            end)
        end
    end
    
    function ReplaceEntity( _entityScriptName, _type, _ori, _player, _name)
        local _entity = GetEntityId(_entityScriptName);
        local pos = GetPosition(_entity);
        local player = _player or Logic.EntityGetPlayer(_entity);
        local orientation = _ori or Logic.GetEntityOrientation(_entity);
        local _namei = _name or Logic.GetEntityName(_entity);
        Logic.DestroyEntity(_entity);
        return  CreateEntity(player, _type, pos, _namei, orientation);
    end
    Wie könnte es klappen, dass sich das objekt langsam dreht






    Marius
    Geändert von Marius94 (07.04.2009 um 18:09 Uhr) Grund: beantwortet
    http://www.mariusscholz.de - Immer einen Besuch wert


  2. #2
    Schmied
    Registriert seit
    11.10.2008
    Beiträge
    491

    Standard AW: Objekt drehen

    Probier das mal:
    Code:
    
    function DrehMich(_entity, _AufWievielGrad, _bImUhrzeigerSinn)-- _bImUhrzeigersinn: true = Ja, false = nein
        local entity = GetID(_entity);
        local JobTable = {}
        JobTable.newOri = Logic.GetEntityOrientation(entity); 
        JobTable.entityType = Logic.GetEntityType(entity)
        JobTable.modifier = _bImUhrzeigerSinn and -2 or 2
        StartSimpleJobEx(function() 
            JobTable.newOri = JobTable.newOri + JobTable.modifier
            if JobTable.newOri < 0 then JobTable.newOri = JobTable.newOri + 360
            elseif JobTable.newOri >= 360 then JobTable.newOri = JobTable.newOri - 360 end
            if (_bImUhrzeigerSinn and JobTable.newOri <= _AufWievielGrad) 
            or ( not _bImUhrzeigerSinn and JobTable.newOri >= _AufWievielGrad) 
            then
                ReplaceEntity( _entity, JobTable.entityType, _AufWievielGrad)
                return true
            end
            ReplaceEntity( _entity, JobTable.entityType, JobTable.newOri)
        end)
        
    end

  3. #3
    Bäcker Avatar von Marius94
    Registriert seit
    30.07.2008
    Beiträge
    662

    Standard AW: Objekt drehen

    Danke, aber klappt leider auch nicht so, dreht sich immernoch in einem Ruck...
    http://www.mariusscholz.de - Immer einen Besuch wert


  4. #4
    Schmied
    Registriert seit
    11.10.2008
    Beiträge
    491

    Standard AW: Objekt drehen

    Was für eine Entität, welche Startausrichtung, welche Zielausrichtung, true oder false gegeben?

    Ich habe damit hier eine IronMine wunderbar in beide Richtungen drehen können.

  5. #5
    Bäcker Avatar von Marius94
    Registriert seit
    30.07.2008
    Beiträge
    662

    Standard AW: Objekt drehen

    Das mit dem Drehen ist ja auch nicht das problem, er dreht sich einfach in einem ruck....
    DrehMich("Drehbruecke1", 310, true)
    Drehbruecke1 ist D_X_Harbour_FootBridge03 mit der orientation 40
    http://www.mariusscholz.de - Immer einen Besuch wert


  6. #6
    Schmied
    Registriert seit
    11.10.2008
    Beiträge
    491

    Standard AW: Objekt drehen

    Ich meinte schon dass es sich hier stufenweise dreht.

    Blöde Frage: Deine alte Funktion hast du aber im Skript deaktiviert?
    (will meinen: Wenn du meine im Skript davor einfügst, gilt anschliessend doch wieder deine Alte beim Aufruf)

  7. #7
    Bäcker Avatar von Marius94
    Registriert seit
    30.07.2008
    Beiträge
    662

    Standard AW: Objekt drehen

    Die Alte funktion ist raus, ich probiers mal mit ner anderen entity...
    EDIT: mit nem gebäude klappts perfekt, aber mit D_X_Harbour_FootBridge03 klappts nicht, könnts an der PID 0 liegen?
    Geändert von Marius94 (06.04.2009 um 11:01 Uhr)
    http://www.mariusscholz.de - Immer einen Besuch wert


  8. #8
    Schmied
    Registriert seit
    11.10.2008
    Beiträge
    491

    Standard AW: Objekt drehen

    Nö, die IronMine hat auch 0. Allerdings muss natürlich ausreichend Platz zur Verfügung stehen, um schrittweise zu drehen. ReplaceEntity nutzt CreateEntityOnUnblockedland zum erzeugen, wenn da also etwas im Weg ist, klappt es nicht wie gewünscht.

  9. #9
    Schafszüchter Avatar von Netsurfer
    Registriert seit
    01.09.2005
    Ort
    Köln/ Cologne
    Beiträge
    1,121
    Blog Einträge
    10

    Idee AW: Objekt drehen

    Nur mal so am Rande gefragt:
    Warum verwendet ihr nicht einfach direkt Logic.SetOrientation?
    (Parameter müsstet ihr mal eben austüffteln, aber ich vermute mal schwer, dass es EntityID und Orientation sind)
    Geändert von Netsurfer (06.04.2009 um 13:27 Uhr) Grund: Rande natürlich und nicht Range ...
    ___________________________


    ___________________________

  10. #10
    Bäcker Avatar von Marius94
    Registriert seit
    30.07.2008
    Beiträge
    662

    Standard AW: Objekt drehen

    Also ich habe D_X_Harbour_FootBridge03 mal auf eine total freie Landfläche gepackt, und es dreht sich trotzdem nur in einem Ruck. Daraufhin habe ich es mit einem anderen doodad probiert, und das gleiche, also ist irgendetwas mit den doodads ......
    http://www.mariusscholz.de - Immer einen Besuch wert


  11. #11
    Bäcker Avatar von Marius94
    Registriert seit
    30.07.2008
    Beiträge
    662

    Standard AW: Objekt drehen

    Zitat Zitat von Netsurfer Beitrag anzeigen
    Nur mal so am Range gefragt:
    Warum verwendet ihr nicht einfach direkt Logic.SetOrientation?
    (Parameter müsstet ihr mal eben austüffteln, aber ich vermute mal schwer, dass es EntityID und Orientation sind)
    Hab ich gestern alles ausprobiert, klappt aber nicht
    Zitat Zitat von mir
    Ich habe mit KuschelUschi schon festgestellt, dass sich Objekte(also alles was nicht settler, oder sonstwie beweglich ist)weder mit
    Logic.SetOrientation(entity, orientation) noch mit Logic.RotateEntity(entity, orientation) drehen kann.
    Also: entity destroyen, und mit gewünster orientation neu setzen.
    Zitat Zitat von KuschlUschi in einer PN
    Vielleicht geht das auch nur mit Entitäten die sich auch im Spiel bewegen lassen.
    Du könntest die Entität auch destroyen und neu createn.
    http://www.mariusscholz.de - Immer einen Besuch wert


  12. #12
    Schmied
    Registriert seit
    11.10.2008
    Beiträge
    491

    Standard AW: Objekt drehen

    @Netsurfer: Siehe Post #1: Laut Marius dreht SetOrientation nur Siedler, das habe ich nicht nochmals geprüft. Prinzipiell funktioniert sein Ansatz ja auch, ob es elegantere gibt, kann man im zweiten Anlauf ja noch checken.
    Warum das Dingen nun aber gerade Doodads nicht (vernünftig) drehen will, ist mir ein Rätsel.

  13. #13
    Schmied
    Registriert seit
    11.10.2008
    Beiträge
    491

    Standard AW: Objekt drehen

    Ich bin verwirrt. Die Footbridge dreht sich hier (auf freiem Land) durchaus schrittweise.

  14. #14
    Bäcker Avatar von Marius94
    Registriert seit
    30.07.2008
    Beiträge
    662

    Standard AW: Objekt drehen

    Ich habe jetzt mal die Zahl auf 10 anstatt 310 und es klappt mit:
    ursprünglich 40 wird zu 10 klappt
    ursprünglich 40 wird zu 310 klappt nicht
    http://www.mariusscholz.de - Immer einen Besuch wert


  15. #15
    Schmied
    Registriert seit
    11.10.2008
    Beiträge
    491

    Standard AW: Objekt drehen

    Okay, Fehler gefunden. Beheben dauert ein wenig.
    Code:
    function DrehMich(_entity, _AufWievielGrad, _bImUhrzeigerSinn)-- _bImUhrzeigersinn: true = Ja, false = nein
        local entity = GetID(_entity);
        local JobTable = {}
        JobTable.newOri = Logic.GetEntityOrientation(entity); 
        JobTable.entityType = Logic.GetEntityType(entity)
        JobTable.modifier = _bImUhrzeigerSinn and -2 or 2
        StartSimpleJobEx(function() 
            JobTable.newOri = JobTable.newOri + JobTable.modifier
            if JobTable.newOri < 0 then JobTable.newOri = JobTable.newOri + 360
            elseif JobTable.newOri >= 360 then JobTable.newOri = JobTable.newOri - 360 end
            local diff = JobTable.newOri - _AufWievielGrad
            if diff >= -2 and diff <= 2 then
                ReplaceEntity( _entity, JobTable.entityType, _AufWievielGrad)
                return true
            end
            ReplaceEntity( _entity, JobTable.entityType, JobTable.newOri)
        end)
        
    end
    Sollte nun besser laufen
    Geändert von BVernheim (06.04.2009 um 11:59 Uhr)

  16. #16
    Bäcker Avatar von Marius94
    Registriert seit
    30.07.2008
    Beiträge
    662

    Standard AW: Objekt drehen

    Hm, jetzt bewegt sich gar nichts mehr
    http://www.mariusscholz.de - Immer einen Besuch wert


  17. #17
    Schmied
    Registriert seit
    11.10.2008
    Beiträge
    491

    Standard AW: Objekt drehen

    Jupp, ich vergass die nils zu entfernen. ich habe hier eine andere ReplaceEntity Version im Einsatz. Habs oben geändert

  18. #18
    Müller Avatar von LordFWD
    Registriert seit
    05.11.2007
    Beiträge
    572

    Standard AW: Objekt drehen

    Zitat Zitat von Marius94 Beitrag anzeigen
    Hm, jetzt bewegt sich gar nichts mehr
    meinst du so eine Bewegung?
    YouTube - NoSubject 06 04 2009

  19. #19
    Bäcker Avatar von Marius94
    Registriert seit
    30.07.2008
    Beiträge
    662

    Standard AW: Objekt drehen

    Ganz genau, ungefär so. ich muss auch gestehen, dass ich deine Map nicht ganz durchgespielt habe
    (Ich hänge kurz nachm besiegen der banditen und tiere)

    Wie hast du eigentlich das video gemacht? Ich hab heute auch schon soetwas versucht, unm das hier zu zeigen, dass er es nicht gemacht hat, hab mir
    Debut Video Capture Software und CamStudio gedownloadet, aber die können nicht im spiel filmen....
    Geändert von Marius94 (06.04.2009 um 12:11 Uhr)
    http://www.mariusscholz.de - Immer einen Besuch wert


  20. #20
    Müller Avatar von LordFWD
    Registriert seit
    05.11.2007
    Beiträge
    572

    Standard AW: Objekt drehen

    Zitat Zitat von Marius94 Beitrag anzeigen
    ich muss auch gestehen, dass ich deine Map nicht ganz durchgespielt habe
    (Ich hänge kurz nachm besiegen der banditen und tiere)
    um Hilfe fragen kostet nix
    wenn du die Wilderer meinst....die Tiere befreien nicht besiegen
    Zitat Zitat von Marius94 Beitrag anzeigen
    Wie hast du eigentlich das video gemacht? Ich hab heute auch schon soetwas versucht, unm das hier zu zeigen, dass er es nicht gemacht hat, hab mir
    Debut Video Capture Software und CamStudio gedownloadet, aber die können nicht im spiel filmen....
    mit Fraps
    Code Dreh-Brücke
    Code:
    StartSimpleHiResJob("DrehBruecke")
    function DrehBruecke()
          if IsNear("MeinRitter","Uebergang", 1000) then
    OpCountB = OpCountB or 0
     _, entity_ID1 = Logic.GetEntitiesInArea(Entities.D_X_Harbour_FootBridge03,29400.00,40500.00, 500, 1)  --x,y eingeben
    local posX1, posY1 = Logic.GetEntityPosition(entity_ID1)
    local orientation1 = Logic.GetEntityOrientation(entity_ID1)
    Logic.DestroyEntity(entity_ID1)
    Logic.CreateEntity(Entities.D_X_Harbour_FootBridge03, posX1, posY1, (orientation1 - 2.5), 1) --hier mit - oder + die Drehrichtung angeben
    OpCountB = OpCountB + 1
    if OpCountB == 35 then
            OpCountB = nil
    
          return true
        end
    end
    end
    Geändert von LordFWD (06.04.2009 um 12:25 Uhr)

+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte

LinkBacks (?)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Ähnliche Themen

  1. Wieso kann man im Edi keine Bäume drehen?
    Von Annosiedler im Forum Siedler 6 AeK Mapperecke
    Antworten: 14
    Letzter Beitrag: 03.03.2009, 22:27
  2. Interaktives Objekt Ruine
    Von Sombeline im Forum Siedler 6 AeK Mapperecke
    Antworten: 6
    Letzter Beitrag: 20.05.2008, 20:28
  3. Ist Interaktives Objekt im Territorium?
    Von Sokrates im Forum Siedler 6 AeK Mapperecke
    Antworten: 0
    Letzter Beitrag: 03.02.2008, 15:57
  4. Wie kann ich Eisenminen bauen, und Gebäude drehen?
    Von Dragonblood im Forum Siedler 6 AeK Singleplayer
    Antworten: 3
    Letzter Beitrag: 30.09.2007, 03:33
  5. BLH 09 Gewonnen! Was ist das Objekt?
    Von holzbude im Forum Siedler 4 Bloody History
    Antworten: 6
    Letzter Beitrag: 15.06.2005, 20:48

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein