Post Reply
4 posts • Page 1 of 1
Skriptthread
Post by Todeskeks »
Da mir der Skriptthread auf Scharesoft so gut gefallen hat, bringe ich in mal auch auf SureAI.

Hier könnt ihr nützliche Skripts posten oder Fragen wenn ihr ein Skript benötigt.

Hier der orginal Thread: http://www.scharesoft.de/joomla/forum/s ... php?t=6136
Last edited by Todeskeks on 01.10.2010 17:48, edited 1 time in total.
Re: Skriptthread
Post by Ayonbird »
Scheinen ja recht wenige Probleme beim Scripten zu haben^^

Naja ich hab auch erst wieder eins nach langer Zeit... Also dann:
Ich wollte einem Licht ein ganz 'simples' Bewegungs-Script, mit Hilfe der X-Position(und deren Veränderung), verpassen.
Zurzeit schaut das Ding so aus:
short MoveMode
short PosX
short PosY
short PosXMoved
short PosYMoved

Begin GameMode

	Set PosX to GetPos X
	Set PosY to GetPos Y

	if PosX == 1024.0000 && PosY == 512.0000
		Set MoveMode to 1
	endif
	
	if PosX == -407.0000 && PosY == 512.0000
		Set MoveMode to 2
	endif

	if MoveMode == 1
		Set PosXMoved to PosX - 0.5
		SetPos X PosXMoved
	endif
	
	if MoveMode == 2
		Set PosYMoved to PosY - 0.5
		SetPos Y PosYMoved
	endif

End
Das Licht soll sich also auch um die Ecke bewegen, aber das ist bei meinem Problem nebensächlich, denn es kommt gar nicht erst bis zum gesetzten Punkt.
Bei genau "PosX == 0" stoppt es einfach und ich hab keinen Plan wieso.

Also sobald das Licht die 0-Grenze der X-Achse berührt ist Ende mit meinem Script. Habe auch schon versucht eine extra Bedingung für
if PosX == 0 && PosY == 512
einzubauen, dass sobald es diese Grenze passiert wieder der Befehl aktiviert wird. Wie man sich denken kann aber erfolglos.

Ideen woran es liegen könnte? Bzw. wie es zu lösen wäre ohne das ganze Interior um die paar Koordinaten zu verschieben?
Re: Skriptthread
Post by arvisrend »
Vermutlich weil 0 - 0.5 auf 0 auf- und nicht auf -1 abgerundet wird. Vergiss nicht, daß PosX eine Short-Variable ist; es wird deshalb dauernd gerundet.
Und mach solche Dinge wie "PosX == 1024.0000" raus. Für Oblivion ist 1024.0000 ein Float, und Floats kann man nicht auf exakte Gleichheit testen, denn Floats sind Näherungswerte. Auf Gleichheit kann man nur zwei diskrete Größen (Short, Long u. Ä.) vergleichen.
Stattdessen würde ich PosX, PosY, PosXMoved und PosYMoved als Floats deklarieren (nicht als Short), und statt exakter Gleichheit (wie "PosX == 1024.0000") immer auf Intervalle der Länge 1 (also PosX < 1025 && PosX > 1024) prüfen.
Re: Skriptthread
Post by Ayonbird »
Ok, also ein reiner Dummheitsfehler meinerseits... Hat sogar schon funktioniert als ich die 0.5 Werte auf 1 gesetzt habe. Hab die shorts aber dennoch zu floats geändert. Denke du hast da etwas mehr Erfahrung ich^^
Funktioniert jetzt auch prima. Danke arvisrend! :D
Post Reply
4 posts • Page 1 of 1