CNDG
Würden Sie gerne auf diese Nachricht reagieren? Erstellen Sie einen Account in wenigen Klicks oder loggen Sie sich ein, um fortzufahren.


Ein Forum, in dem sich neue Clonk Entwickler untereinander austauschen können.
 
StartseiteStartseite  PortalPortal  SuchenSuchen  Neueste BilderNeueste Bilder  AnmeldenAnmelden  LoginLogin  

 

 Luftschiff fliegt nicht

Nach unten 
+2
Mega Hazard
Bowserkoopa
6 verfasser
AutorNachricht
Bowserkoopa
Staatsrat
Staatsrat
Bowserkoopa


Männlich Alter : 30
Anmeldedatum : 21.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyDo Apr 02, 2009 7:17 pm

Ich versuche ein Luftschiff zu machen, das viel größer ist als das normale, und eine größere Solide Mask haben soll. Die Drehung des normalen Luftschiffes habe ich rausgeschnitten, da es keine Drehsequenz gibt(bin zu faul dazu). Dabei gibt es einige Probleme:
1. Die solid Mask bleibt bei der Drehung vorhanden. Man läuft quasi in der Luft und sinkt durch festen Bestandteil.
2. Bei der Drehung "holpert" es. Das Luftschiff dreht sich immer wieder zurück und vor innerhalb einer Sekunde.

Hier die Graphics:

Luftschiff fliegt nicht Graphi10

Und das Skript ist das Skript des Luftschiffes, ohne die Drehfunktion(also die verzögerte Drehung)
Code:
/*-- Luftschiff --*/

#strict

local turn_end_dir;

/* Steuerung */

private func DoDirection(int comdir)
{
  var cur_comdir = GetComDir();
  if(GetAction() S= "FloatIdle") cur_comdir = COMD_Stop;

  cur_comdir = ComDirTransform(cur_comdir, comdir);
  //while(cur_comdir == COMD_Stop)
  //  cur_comdir = ComDirTransform(cur_comdir, comdir);

  SetDirection(cur_comdir);
}

private func ClearDir(bool fX)
{
  if(fX && GetXDir())
  {
    if(GetXDir() > 0) SetXDir(GetXDir() - 1);
    else SetXDir(GetXDir() + 1);
  }
  if(!fX && GetYDir())
  {
    if(GetYDir() > 0) SetYDir(GetYDir() - 1);
    else SetYDir(GetYDir() + 1);
  }
}

private func SetDirection(int comdir)
{
  // Richtungsaenderung nach oben/unten geht auch mit "Turn", aber eine
  // ComDir-Aenderung, die wieder eine Turn-Action erfordern wuerde muss
  // warten, bis die jetzige Turn-Action fertig ist.
  if(GetAction() S= "Turn")
  {
    turn_end_dir = comdir;
    if(comdir == COMD_Stop || (ComDirLike(comdir, COMD_Right) && GetDir() == DIR_Left) || (ComDirLike(comdir, COMD_Left) && GetDir() == DIR_Right))
    {
      return(0);
    }
  }

  // ComDir uebernehmen
  SetComDir(comdir);

  // Angebrachte Action setzen
  if(GetAction() ne "Turn" && GetAction() ne "WaterLaunch")
  {
    if(comdir != COMD_Stop && GetAction() ne "FloatPropel")
      SetAction("FloatPropel");
    if(comdir == COMD_Stop && GetAction() ne "FloatIdle")
      SetAction("FloatIdle");
  }

  // Vorherige ClearDirs wegtun
  ClearScheduleCall(this(), "ClearDir");
  // Wenn Bewegung in nur eine Richtung, dann Bewegung in die andere
  // Richtung aufgeben (macht FLOAT-Prozedur nicht automagisch)
  if(comdir == COMD_Down || comdir == COMD_Up)
    ScheduleCall(this(), "ClearDir", 1, Abs(GetXDir()), true);
  if(comdir == COMD_Left || comdir == COMD_Right || comdir == COMD_Stop)
  {
    ScheduleCall(this(), "ClearDir", 1, Abs(GetYDir()), false);

    // Bei Bewegung nur in X-Richtung ein wenig schaukeln
    if(!GetEffect("IntWindYDir", this()))
      AddEffect("IntWindYDir", this(), 1, 10, this());
  }
  else
  {
    if(GetEffect("IntWindYDir", this()))
      RemoveEffect("IntWindYDir", this());
  }

  if(ComDirLike(comdir, COMD_Right) && GetDir() == DIR_Left)
  {
    SetDir(DIR_Right);
    SetAction("Turn");
  }

  if(ComDirLike(comdir, COMD_Left) && GetDir() == DIR_Right)
  {
    SetDir(DIR_Left);
    SetAction("Turn");
  }

  // Beim Landen auf COMD_Down lassen, sonst hopst das Luftschiff schnell
  // wieder in die Luft
  if(comdir == COMD_Stop && GBackSolid(0, GetObjHeight()/2+2))
    SetComDir(COMD_Down);
}

protected func ControlUpdate(object controller, int comdir, bool dig, bool throw)
{
  SetDirection(comdir);
}

protected func ControlUp(object controller)      // hoch
{
  [$TxtAscend$]
  ClearCommand();
  if (GetAction()S="DropOff") return(0);
  if (GetAction()S="WaterLand") SetAction("WaterLaunch");

  if(!GetPlrCoreJumpAndRunControl(controller->GetController()))
    DoDirection(COMD_Up);
}

protected func ControlDownSingle(object controller)  // runter
{
  [$TxtDescend$|Method=Classic]
  if (GetAction()S="DropOff") return(0);
  if(!GetPlrCoreJumpAndRunControl(controller->GetController()))
  {
    ClearCommand();
    DoDirection(COMD_Down);
  }
}

protected func ControlDown(object controller)
{
  [$TxtDescend$|Method=JumpAndRun]
  // Lediglich fuer das Kommandosymbol bei JnR-Steuerung
}

protected func ControlRight(object controller)      // rechts
{
  [$TxtTurnright$]
  ClearCommand();

  if(!GetPlrCoreJumpAndRunControl(controller->GetController()))
  {
    if (GetAction()S="DropOff") return(0);
    if (GetAction()S="Turn") return(0);
    SetAction("FloatPropel");
    DoDirection(COMD_Right);
  }
}

protected func ControlLeft(object controller)        // links
{
  [$TxtTurnleft$]
  ClearCommand();

  if(!GetPlrCoreJumpAndRunControl(controller->GetController()))
  {
    if (GetAction()S="DropOff") return(0);
    if (GetAction()S="Turn") return(0);
    SetAction("FloatPropel");
    DoDirection(COMD_Left);
  }
}

protected func ControlCommand(string szCommand,object pTarget,int iX,int iY)
{
  // Pilot läßt los
  if (szCommand S= "UnGrab")
    return(0,ClearCommand(),NoPilotCheck());
  // Bewegungskommando vom Piloten
  if (szCommand S= "MoveTo")
    return(SetCommand(this(),szCommand,pTarget,iX,iY));
  return(0);
}

private func ClearCommand() { SetCommand(this(),"None"); }

/* Initialisierung */

protected func Initialize()
{
  turn_end_dir = -1;
  FloatIdleDown();
}

/* Aktivität */

protected func FxIntWindXDirTimer()
{
  if(GetAction() ne "FloatIdle" && GetAction() ne "WaterLand") return(-1);
  if(GetContact(0, -1, 8)) return;
  SetXDir(BoundBy(GetWind()/4, Max(GetXDir() - 2, -10), Min(GetXDir() + 2, 10)));
}

protected func FxIntWindYDirTimer()
{
  if(GBackSolid(0, GetObjHeight()/2+2)) return(-1);
  SetYDir(BoundBy(GetYDir() + RandomX(-GetYDir()) - 1 + Random(3), Max(GetYDir() - 1, -3), Min(GetYDir() + 1, 3)));
}

private func FloatProcess()
{
  if(!GetEffect("IntWindXDir", this()))
    AddEffect("IntWindXDir", this(), 1, 5, this());

  if(!GetEffect("IntWindYDir", this()) && !GBackSolid(0, GetObjHeight()/2+2))
  {
    AddEffect("IntWindYDir", this(), 1, 10, this());
  }

//  if(GetComDir() == COMD_Stop && GBackSolid(0, GetObjHeight()/2+2))
//    SetComDir(COMD_Down);

  NoPilotCheck();
  CheckCommandAction();
  return(1);
}

private func FlightProcess()
{
  NoPilotCheck();
  CheckCommandAction();
  return(1);
}

private func CheckCommandAction()
{
  // Propeller an für Kommando
  if (GetCommand())
    if (GetAction()S="FloatIdle")
      SetAction("FloatPropel");
  // Wenden nach rechts
  if (GetAction() eq "FloatPropel")
    if (Inside(GetComDir(),COMD_UpRight,COMD_DownRight))
      if (GetDir()==DIR_Left)
        { SetAction("Turn"); SetDir(DIR_Right); return(true); }
  // Wenden nach links
  if (GetAction() eq "FloatPropel")
    if (Inside(GetComDir(),COMD_DownLeft,COMD_UpLeft))
      if (GetDir()==DIR_Right)
        { SetAction("Turn"); SetDir(DIR_Left); return(true); }
  // Anhalten wenn Ziel erreicht
  if(!GetCommand() && !GetComDir())
    SetDirection(COMD_Stop);
  return(0); 


private func NoPilotCheck()
{
  if (!FindObject(0,0,0,0,0,0,"Push",this()))
    return(FloatIdleDown());
  return(0);
}

private func FloatIdleDown()
{
  if (GetAction()ne"FloatIdle")
    SetAction("FloatIdle");
  SetComDir(COMD_Down());
  ClearCommand();
  return(1);
}

/* Trefferkontrolle */

protected func RejectCollect(id idObject, object pObj)
{
  // Pfeile vertragen sich nicht mit einem Luftschiff
  if (DefinitionCall(idObject,"IsArrow") )
  // Nur, wenn der Pfeil sich auch bewegt
  if(GetXDir(pObj) || GetYDir(pObj))
  {
    // bei brennendem Pfeil anzünden
    if(OnFire(pObj)) Incinerate();
    // ansonsten abstürzen
    else SetAction("DropOff");
    // in jedem Fall im Pfeil Hit auslösen (Sprengpfeil explodiert zB)
    ProtectedCall(pObj, "Hit");
    return(1);
  }
  return(1);
}

/* Angriff durch Vögel */

public func Poke()
{
  Sound("Rip");
  SetAction("DropOff");
  return(1);
}
 
/* Forschung */

public func GetResearchBase() { return(BALN); }
Ähh, weiß wer wie ich das in nen Spoiler kriege?

Und falls es hilft: Hier das Objekt als Download:

Airship
Nach oben Nach unten
Mega Hazard
Staatsrat
Staatsrat
Mega Hazard


Männlich Alter : 31
Ort : Brunswiek *helllau*
Anmeldedatum : 24.01.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyDo Apr 02, 2009 7:25 pm

Zitat :
1. Die solid Mask bleibt bei der Drehung vorhanden. Man läuft quasi in der Luft und sinkt durch festen Bestandteil.

Füge einmal die SolidMask gespiegelt in die Grafik ein (so dass du beide Seiten hast) und nutze nach der Wendung/bei der Wendung SetSolidMask()
Nach oben Nach unten
http://megahazard.lima-city.de/Main.htm
Bowserkoopa
Staatsrat
Staatsrat
Bowserkoopa


Männlich Alter : 30
Anmeldedatum : 21.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyDo Apr 02, 2009 7:29 pm

Ok, dann wäre das erste Problem erledigt. Doch irgendwie dreht sich das ganze ja nicht. Schwer zu erklären, aber es wendet sich immer nach rechts und links. Und das 5x pro Sekunde. Müsstes es euch mal selbst anschauen.
Nach oben Nach unten
Toastbrot
Kadett
Kadett
Toastbrot


Männlich Anmeldedatum : 10.03.09

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyDo Apr 02, 2009 8:40 pm

Wenn du das Object als Ganzes irgentwo Hochladen würdest werde ich es mir mal ansehen.

mfg Toastbrot
Nach oben Nach unten
Gamer
Staatsrat
Staatsrat
Gamer


Männlich Alter : 28
Ort : In einem kleinen Dorf in Unterfranken (Bayern)
Anmeldedatum : 10.02.09

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyDo Apr 02, 2009 8:45 pm

Vlt. auch noch die Actmap.
Nach oben Nach unten
http://www.gamer95.npage.de/
Mega Hazard
Staatsrat
Staatsrat
Mega Hazard


Männlich Alter : 31
Ort : Brunswiek *helllau*
Anmeldedatum : 24.01.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyDo Apr 02, 2009 8:51 pm

Btw, ihr beiden, es ist schon hochgeladen...
Nach oben Nach unten
http://megahazard.lima-city.de/Main.htm
Gamer
Staatsrat
Staatsrat
Gamer


Männlich Alter : 28
Ort : In einem kleinen Dorf in Unterfranken (Bayern)
Anmeldedatum : 10.02.09

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyDo Apr 02, 2009 8:59 pm

Ups. Das steht ja ganz da unten nach diesen 1ne Milliarden Zeilen Script!
Nach oben Nach unten
http://www.gamer95.npage.de/
Toastbrot
Kadett
Kadett
Toastbrot


Männlich Anmeldedatum : 10.03.09

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyDo Apr 02, 2009 10:11 pm

Das das so Ruckelt liegt wahrscheinlich daran das die Grafikkordianaten nicht ganz richtig liegen,dass solltest du dir noch mal angucken. Das es sich nicht bewegt liegt daran das einige Vertises so liegen das sie sich in der eigenen Solid-Mask verfangen.
Ich habs mal ohne die Vertises probiert und es klappte Very Happy

mfg Toastbrot
Nach oben Nach unten
Bowserkoopa
Staatsrat
Staatsrat
Bowserkoopa


Männlich Alter : 30
Anmeldedatum : 21.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyFr Apr 03, 2009 1:55 pm

Sind Vertexe überhaupt notwendig? Den Skript wollte ich ja sowieso in nem Spoiler machen, aber die Funktion ist bei mir nicht vorhanden.

EDIT: Vertexe neu positioniert. SetSolidMask eingefügt, Grafik geändert. Einiges hat sich getan. Nur fliegt es nicht richtig. eben nur nach links, doch rechts geht nicht wirklich. Habs nochmal hochgeladen: Airship Version 2
Nach oben Nach unten
Umezawa
Feldmarschall
Feldmarschall



Männlich Alter : 29
Anmeldedatum : 30.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyFr Apr 03, 2009 5:51 pm

Ja, Vertice(müsste glaub ich der richtige Plural von Vertex sein) sind sehr wichtig, das sind ja die Punkte, an denen das Objekt aufliegt. Ohne sie würde das Objekt einfach durch die Landschaft fallen.
Nach oben Nach unten
Bowserkoopa
Staatsrat
Staatsrat
Bowserkoopa


Männlich Alter : 30
Anmeldedatum : 21.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyFr Apr 03, 2009 6:08 pm

Na gut Vertices sind neu festgelegt, so dass sie sich nicht mehr mit der SolidMask in die Haare kriegen. Allerdings fliegt das Schiff nun nicht nach rechts. Es dreht sich nach rechts, fliegt aber nicht mehr weiter. An was könnte das Problem liegen?
Nach oben Nach unten
Toastbrot
Kadett
Kadett
Toastbrot


Männlich Anmeldedatum : 10.03.09

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptyFr Apr 03, 2009 8:16 pm

Bowserkoopa schrieb:
An was könnte das Problem liegen?


Ist das Luftschiff nach Rechts gedreht kommt immer noch ein Vertex mit der Solid-Mask in konflikt.
Am besten du drückts mal während des Spiels erst [F5]+[Alt] (Debug-Modus) und dann [F6]+[Alt](Vertice und Entrances anzeigen.)
Dann siehts du das die Linke mittlere Vertex in der SolidMask steckt.
Nach oben Nach unten
Bowserkoopa
Staatsrat
Staatsrat
Bowserkoopa


Männlich Alter : 30
Anmeldedatum : 21.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptySa Apr 04, 2009 10:13 am

Aus irgendeinem Grund werden einfach nur alle Flächen einheitlich dargestellt, und Vertece zeigen sich gar nicht. Ok, dann noch einen Vertex umpositionieren. Was für Nutzen haben eigentlich Kollisionsfreie Vertece? Sie fliegen durch die Landschft als ob gar nichts da wäre. Mir ist der Sinn dieser vollig unbekannt. Kann mir die einer erklären?
Nach oben Nach unten
Simsi
Staatssekretär
Staatssekretär
Simsi


Männlich Alter : 31
Ort : Vaihingen/Enz
Anmeldedatum : 30.03.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptySa Apr 04, 2009 11:58 am

Beim attachen (ausrichten von objekten an anderen) werden vertices aneinander ausgerichtet (z.b. vertex 1 von objekt 1 an vertex 7 von objekt 2). will man nun dass dies nur positionsgeber sind kann man sie kollisionsfrei machen. ich glaub beim drache ist das so einer, nämlich immer da wo der magus sitzen soll.
Nach oben Nach unten
Bowserkoopa
Staatsrat
Staatsrat
Bowserkoopa


Männlich Alter : 30
Anmeldedatum : 21.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptySa Apr 04, 2009 12:15 pm

Ok, also werden kollisionsfreie eigentlich nur zum ausrichten benutzt. Ok, dann müsste das Schiff ja funktionieren wenn ich den Vertex ändere. Und wie müssen bei den Clonks die Vertices ausgerichtet sein, damit er gut läuft? bei dein meisten eigenen, können die nicht richtig klettern oder stolpern ab und zu auf der Erde. Werden da auch kollisionsfreie benutzt und klappt es besser wenn ich den CNAT jeweils 2 Richtungen zuweise? Z.B. oben-rechts, oben, oben-links- links-mitte,...

Und wozu ist die Reibung da? Also VertexFriction? Sorry, für die vielen Fragen, aber ich finde die in der Doku nirgends.
Nach oben Nach unten
Umezawa
Feldmarschall
Feldmarschall



Männlich Alter : 29
Anmeldedatum : 30.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptySa Apr 04, 2009 12:36 pm

Friction ist wie leicht (also bei welcher Schrägstellung des Untergrundes) ein auf dem entsprechenden Vertex aufliegendes Objekt abrutscht.
Nach oben Nach unten
Bowserkoopa
Staatsrat
Staatsrat
Bowserkoopa


Männlich Alter : 30
Anmeldedatum : 21.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptySa Apr 04, 2009 12:42 pm

Also sind niedrige Frictions besser?
Nach oben Nach unten
Umezawa
Feldmarschall
Feldmarschall



Männlich Alter : 29
Anmeldedatum : 30.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptySa Apr 04, 2009 2:38 pm

Niederige Frictions rutschen besser, was besser ist, hängt vom Objekt ab.
Nach oben Nach unten
Bowserkoopa
Staatsrat
Staatsrat
Bowserkoopa


Männlich Alter : 30
Anmeldedatum : 21.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptySa Apr 04, 2009 5:01 pm

Warum wurden im Clonk selbst, hohe Frictions verwendet? Da müsste der doch bei Erde leicht stolpern?
Nach oben Nach unten
Umezawa
Feldmarschall
Feldmarschall



Männlich Alter : 29
Anmeldedatum : 30.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptySo Apr 05, 2009 2:01 pm

Es geht ja nur ums rutschen, also bei welcher Schräge er anfängt zu rutschen. Bei der WALK Prozedur rutscht er ja nicht, er geht. Du kannst ja auch besser ohne Butter unter den Schuhen laufen als mit, oder?
Nach oben Nach unten
Bowserkoopa
Staatsrat
Staatsrat
Bowserkoopa


Männlich Alter : 30
Anmeldedatum : 21.12.08

Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht EmptySo Apr 05, 2009 3:32 pm

Am Vertex welcher unten ist, sollte ich also z.B. VertexFriction=0 setzen?
Nach oben Nach unten
Gesponserte Inhalte





Luftschiff fliegt nicht Empty
BeitragThema: Re: Luftschiff fliegt nicht   Luftschiff fliegt nicht Empty

Nach oben Nach unten
 
Luftschiff fliegt nicht
Nach oben 
Seite 1 von 1
 Ähnliche Themen
-
» Mehrere Probleme mit neuem Luftschiff
» Verfolgungstorpedo
» Spawnpoints geh nicht

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
CNDG :: Sonstiges :: Anfragen-
Gehe zu: