[No Limits 1&2] Questions et problèmes (Archives)

Statut
Ce sujet est verrouillé
Intamin Fan a dit:
Tu es mon sauveur ! c'est exactement ça que je recherchais pour mon launch  :rire: Comment as tu fais ?

En switchant 7 écrans dotés de 7 mat différents sur une reprise du script de DJulio pour l'ouverture des portes latérales.

Code:
case STATE_OPENING:    
{
       startTime += fTickTime;    
      
        if (startTime >= 0 && startTime <= 1) { 
		ObjetEcran1.setVisible(true);
	} else {  
		 ObjetEcran1.setVisible(false);
	}
		
}
      break;
 
Après dans les mat, on peut y mettre un animé mais il tournera en boucle et ne sera pas syncro. Mais avec un peu d'imagination on peut le coincer entre deux ou trois écrans de façon a faire des fade in & out .
 
Le script complet ...

Code:
import com.nolimitscoaster.*;
import nlvm.math3d.*;


public class ChangeMat extends Script implements TrackTriggerListener
{
  private SceneObject sco;
  private SceneObjectElement ObjetEcran1;
  private SceneObjectElement ObjetEcran2;
  private SceneObjectElement ObjetEcran3;
  private SceneObjectElement ObjetEcran4;
  private SceneObjectElement ObjetEcran5;
  private SceneObjectElement ObjetEcran6;
  private SceneObjectElement ObjetEcran7;

  private static final int STATE_IDLE = 0;
  private static final int STATE_OPENING = 1;
  private static final int STATE_OPENING_REVERSED = 2;
  private static final int STATE_CLOSING = 3;
 
  
 
  private static float startTime = 0.0f;
  
  
  private int state;
  private float rot;
 
  private TrackTrigger beforeDoorTrigger;
  private TrackTrigger behindDoorTrigger;

  private static final String scriptName = "TriggerMat";
 

  public bool onInit()
  {
 
   sco = sim.getSceneObjectForEntityId(getParentEntityId());
    if (sco == null)
    {
      System.err.println(scriptName + ": the script is not part of a scene object");
      return false;
    }

    ObjetEcran1 = sco.getElementForName("ecran1");
 	  ObjetEcran2 = sco.getElementForName("ecran2");
 	  ObjetEcran3 = sco.getElementForName("ecran3");
 	  ObjetEcran4 = sco.getElementForName("ecran4");
 	  ObjetEcran5 = sco.getElementForName("ecran5");
 	  ObjetEcran6 = sco.getElementForName("ecran6");
 	  ObjetEcran7 = sco.getElementForName("ecran7");
 	     
   


		Vector3f pos = new Vector3f();

    sco.getTranslation(pos);      
    
    

    final float range = 3;     

    

    TrackPos trackPos = sim.findNearestCoasterTrack(pos, range);
    if (trackPos == null)
    {
      System.err.println(scriptName + ": no coaster found within a range of "+ range + " meters");  // le trigger est trop loin du rail
      return false;
    }
    else
    {
   
    //******************************************************************************************

      Coaster coaster = trackPos.getCoaster();        // cherche une montagne russe
     
      
           // cree un trigger 5 m avant le projecteur

      beforeDoorTrigger = TrackTrigger.createTrackTriggerAtOffset(trackPos, -5.0);

      // cree un trigger 5 m apres la porte

      behindDoorTrigger = TrackTrigger.createTrackTriggerAtOffset(trackPos, +5.0);
     

      

      beforeDoorTrigger.addTrackTriggerListener(this);
      behindDoorTrigger.addTrackTriggerListener(this);
    }
   
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      
    state = STATE_IDLE;         // Etat de repos ou pause
    
    ObjetEcran1.setVisible(true);
    ObjetEcran2.setVisible(false);
    ObjetEcran3.setVisible(false);
    ObjetEcran4.setVisible(false);
    ObjetEcran5.setVisible(false);
    ObjetEcran6.setVisible(false);
    ObjetEcran7.setVisible(false);
    return true;
    
           
  }
  
  


  public void onNextFrame(float fTickTime)
  {

    switch (state)
    {
    case STATE_IDLE:        // Ne rien faire

      break;
      
      
      
    case STATE_OPENING:    
      {
       startTime += fTickTime;    
         float t = System.currentTimeMillis() ;
        
        
      		 
          
           
		if (startTime >= 0 && startTime <= 1) { 
			ObjetEcran1.setVisible(true);
		} else {  
		 ObjetEcran1.setVisible(false);
		 
		}
		if (startTime >= 1 && startTime <= 2) { 
			ObjetEcran2.setVisible(true);
		} else {  
		 ObjetEcran2.setVisible(false);
		 
		}
		if (startTime >= 2 && startTime <= 3) { 
			ObjetEcran3.setVisible(true);
		} else {  
		 ObjetEcran3.setVisible(false);
		 
		}
		if (startTime >= 3 && startTime <= 4) { 
			ObjetEcran4.setVisible(true);
		} else {  
		 ObjetEcran4.setVisible(false);
		 
		}
		if (startTime >= 4 && startTime <= 5) { 
			ObjetEcran5.setVisible(true);
		} else {  
		 ObjetEcran5.setVisible(false);
		 
		}
		if (startTime >= 5 && startTime <= 6) { 
			ObjetEcran6.setVisible(true);
		} else {  
		 ObjetEcran6.setVisible(false);
		 
		}
		if (startTime >= 6 && startTime <= 7) { 
			ObjetEcran7.setVisible(true);
		} else {  
		 ObjetEcran7.setVisible(false);
		 
		}
		if (startTime >= 7 && startTime <= 10) { 
			ObjetEcran1.setVisible(true);
		} else {
		 
		}
		
		
		
		

		}
      break;
      
      
      
       
    
    
    
    case STATE_CLOSING:                
      {
       startTime += fTickTime;    
        
       startTime = 0;
    ObjetEcran1.setVisible(true);
    ObjetEcran2.setVisible(false);
    ObjetEcran3.setVisible(false);
    ObjetEcran4.setVisible(false);
    ObjetEcran5.setVisible(false);
    ObjetEcran6.setVisible(false);
    ObjetEcran7.setVisible(false);
      }
      break;
    }
  }





//***************************************************************************************

  public void onTrainEntering(TrackTrigger trigger, Train train)
  {
    if (trigger == beforeDoorTrigger)
    {
      if (train.getSpeed() > 0)
      {
        state = STATE_OPENING;
      }
    }
    else if (trigger == behindDoorTrigger)
    {
      if (train.getSpeed() < 0)
      {
        state = STATE_OPENING_REVERSED;

      }
    }
  }
//******************************************************************************************
  /**
    *
    * elle sera appelé si l'interface est inscrit pour un déclenchement à l'aide du
    * Méthode de addTrackTriggerListener
    * Lorsque le train quitte le trigger
   */

  public void onTrainLeaving(TrackTrigger trigger, Train train)
  {
    if (trigger == beforeDoorTrigger)
    {
      if (train.getSpeed() < 0)
      {
        state = STATE_CLOSING;

      }
    }
    else if (trigger == behindDoorTrigger)
    {
      if (train.getSpeed() > 0)
      {
        state = STATE_CLOSING;

      }
    }
  }


}
 
Salut, quand je lance la demo de NL2 et que je lance un track quand le train dispatch ça lag et l'image n'est pas fluide comment je peut régler le problème ? Merci d'avance  :-)
 
  private static final String scriptName = "TriggerMat";

A quoi correspond cette ligne? Elle appelle un autre script? Le nom ne doît-il pas porter le même que la première déclaration de script tout en haut (ici ChangeMat) ?

Merci d'avance!

EDIT :

J'ai un petit soucis avec l'animation. En fait elle ne se déclenche pas.

J'ai bien les 7 écrans nommés ecran1, ecran2 etc. Je l'ai ai séparé exprès pour voir le fonctionnement.
nd1b.jpg



Mais dans le simulateur, seule le premier écran est affiché, ce qui est normal, mais l'animation ne se lance pas.

olnb.jpg


Pas de message d'erreur, le script est bien attaché au panneau. Est-ce que le fait d'utiliser un custom train empêche la détection?

 
benije a dit:
A quoi correspond cette ligne? Elle appelle un autre script? Le nom ne doît-il pas porter le même que la première déclaration de script tout en haut (ici ChangeMat) ?

Désolé je n'ai aucune idée, je ne me suis pas encore penché sur la question, en fait j'ai utilisé un autre moyen pour ce que je veux faire. Si je trouve je te préviendrai !

J'ai un problème pour la vidéo quant à moi, lorsque je démarre ma vidéo (touce "o"), les lumières se déclenchant avec des scripts ne durent pas le même temps que sur le script, pourtant je ne suis pas en motion blur, quelqu'un aurait t-il une idée pour faire en sorte que mes lumières durent le temps inscrit sur mes scripts ? (par exemple pour 20000 millisecondes, la vidéo ne laisse apparaitre la lumière seulement qu'une seconde je comprends pas très bien) :-)
 
Pour intégrer une vidéo c'est un Nl2mat qu'il te faut, pas un script, c'est une texture animée, pour le girofar c'est le stroblightbehavior qu'il faut utiliser avec un automate-light obligatoirement

Stroblight:

Code:
import com.nolimitscoaster.*;
import nlvm.math3d.*;

public class StrobeLightBehaviour extends Script
{
  private static final String lightName = "thelight";
  
  private SceneObjectLight light;
  private SceneObject sceneObject;
  private bool lightIsEnabled;
  private double startTime;
  private double shiftTime;
  private Vector3f lightColor;
  private Vector3f blackColor;
  

  public bool onInit() {
  

    sceneObject = sim.getSceneObjectForEntityId(getParentEntityId());
    light = sceneObject.getLightForName(lightName);
	lightColor = new Vector3f();
    light.getColor(lightColor);
	blackColor = new Vector3f(0,0,0);
	
    if (light == null) {
      System.err.println("Scene object has no light with name '" + lightName + "'");
      return false;
    }


    lightIsEnabled = true;
    light.setColor(lightColor);

	startTime = System.currentTimeMillis(); 
	shiftTime = 100;
    
    return true;
  }
  

  public void onNextFrame(float tick) {
  

	double currentTime = System.currentTimeMillis();
	double elapsedTime = currentTime - startTime;
	

	if (elapsedTime > shiftTime) {
		if (lightIsEnabled) { 
			lightIsEnabled = false;
            light.setColor(blackColor);
		} else { 
			lightIsEnabled = true;
            light.setColor(lightColor);
		}
		startTime = currentTime;
	} else {

	}
  }
}

Sinon pour mon souci de vidéo quelqu'un ayant déjà filmé avec des script utilisant des lumières pourrait t-il m'éclairer ? (jeu de mot pourri X) )

EDIT: quelqu'un aurait-il une idée pour synchroniser le temps d'éxecution des scripts par rapport au temps du tournage de la vidéo qui est extrêmement ralentie ?
 
benije a dit:
A quoi correspond cette ligne? Elle appelle un autre script? Le nom ne doît-il pas porter le même que la première déclaration de script tout en haut (ici ChangeMat) ?

Dans le simulateur, seule le premier écran est affiché, ce qui est normal, mais l'animation ne se lance pas.

Non, il n'appelle pas de script mais sert juste a donner un non pour les messages d'erreurs.

Je vous ai mis en téléchargement le countdown ici :
http://www.dawaweb.ch/dawa/?page_id=1823
 
Bonjour.
Je sais pas ce que j'ai raté comme épisode mais il y a un truc qui me turlupine...
Pendant un moment, en mode simulateur, flight view, je ne pouvais passer au travers de rien.
Et à présent, je passe à travers tout les objets.

Qu'est ce que j'ai changé, est-ce que vous avez constaté la même chose ?
 
Tu veux dire est ce qu'il existe un script pour forcer a ne pas passer au travers des objets ?

Je ne sais pas du tout, en fait sur la console du simulateur on a pas d'info sur ce genre de commande mais il doit surement y avoir un moyen de rendre les objets intraversables en fly view(ça se dit ?^^) dans les options du Nl2sco, moi ce que je me demande surtout c'est est ce qu'il possible de bloquer certaine touche genre obliger un joueur a ne pas se mettre en fly view pour par exemple faire un labyrinthe.
 
Statut
Ce sujet est verrouillé