PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Erledigt] "Verschwommen" Effekt beim XP



strich
10.02.2010, 21:53
Heyho Leute!

Nen Freund und ich arbeiten gerade an einem Game (XP) worin es unter anderem eine Art "Blinzeln" Feature geben soll. Das ganze hat einen tieferen Sinn der auch mit der Story zu tun hat, wichtig ist jedenfalls, das nach und nach der Bildschirm immer mehr "Verschwommen" erscheinen soll.
Zuerst hatten wir die Idee einfach ein glasiges, transparentes Bild drüber zu legen, und anhand der Opacity die Stärke zu regulieren. Schnell wurde uns klar das das eigentlich garnicht möglich ist, da sowas nur auf einem bereits exestierenden Bild funktioniert (zum Beispiel wenn man ein Menü aufruft und der Hintergrund einfriert), nicht in einem ständig bewegendem Spiel.
Ich habe noch allerhand rumprobiert, muss aber sagen das mir auch über Ruby keine Lösung einfällt (bei Google habe ich auch nichts nützliches gefunden, halt nur sachen für Standbilder).

Dann kam mir sehr schnell dieses Forum in den Sinn, also dachte ich mir, schilder ich 's euch einfach mal, kann ja nicht schaden. :)
Danke schonmal im Vorraus! ;)

Shining Advances
11.02.2010, 14:06
diese dll in den ordner des spieles kopieren
http://www.megaupload.com/?d=AH786RAB
un das script über main einfügen:

module Capture
begin
@@cap = Win32API.new('capture','capture','l','l').freeze
rescue Exception
raise if $DEBUG
raise( LoadError , "cannot read modules.(capture.dll)",caller(0))
end
def self.capture
b = Bitmap.new(640,480)
if( s = @@cap.call( b.object_id )) != 0
end
b
end
end
class Game_System
alias initialize_blur initialize
attr_accessor :blur
def initialize
initialize_blur
@blur = false
end
end
class Spriteset_Map
alias update_blur update
alias initialize_blur initialize
alias dispose_blur dispose
def initialize
@blur = [Sprite.new,Sprite.new,Sprite.new,Sprite.new]
if $game_system.blur
bit = Capture.capture
else
bit = Bitmap.new(1,1)
end
for i in 0...4
@blur[i].x = i/2*2-1
@blur[i].y = (i%2)*2-1
@blur[i].bitmap = bit
@blur[i].opacity = 50
@blur[i].z = 90
end
initialize_blur
end
def dispose
dispose_blur
@blur[0].bitmap.dispose
for i in 0...4
@blur[i].dispose
end
end
def update
update_blur
if $game_system.blur
@blur[0].bitmap.dispose
@blur[0].bitmap = Capture.capture
@blur[0].visible = true
for i in 1...4
@blur[i].bitmap = @blur[0].bitmap
@blur[i].visible = true
end
else
for i in 0...4
@blur[i].visible = false
end
end
end
end
ein bzw ausschalten kannst du den blur per call script

$game_system.blur = truebzw
$game_system.blur = false
a = "b"
der maker hat die angewohnheit sich bei call scripts, die auf "= false" enden, aufzuhängen, deshalb das (eigentlich nutzlose) a = "b"

credits gehen an white-flute und mich (mich musste nicht nennen, white flute hat mit dem screenshotscript eigtl den großteil der arbeit vollbracht)

strich
11.02.2010, 15:23
Ernsthaft: Das bei weitem genialer als ich es mir überhaupt erhofft hatte! Der Effekt ist perfekt für unsere Zwecke.
1 Kleinigkeit habe ich nur noch verändert, und zwar habe ich in den Update-Teil noch die Opacity rein gesetzt, da sich diese ja ständig im Spiel verändert (sie steht jetzt auch generell auf einer Variable). Jetzt brauch ichs nur noch zu aktivieren und es läuft perfekt. =]
Creditseintrag haben du und white-flute auf jeden fall bei uns sicher, und auch ein big THANKS. :D

The_Burrito
12.02.2010, 08:49
der maker hat die angewohnheit sich bei call scripts, die auf "= false" enden, aufzuhängen, deshalb das (eigentlich nutzlose) a = "b"


Das lässt sich eigentlich ganz einfach erklären. Ruby benutzt immer das Ergebnis des letzten durchgeführten Statements als Ergebnis für die Methode. Am Schluss einer Methode kann mans ich also das return Keyword eigentlich schenken (auch wenn ichs der Leserlichkeit halber trotzdem schreibe).
Das Ergebnis des letzten durchgeführten Statements ist auch das Ergebnis welches die eval Methode zurückliefert, welche die Interpreter Klasse benutzt um Script Eventcommands durchzuführen. Dieses ergebnis wird dann von command_355 Methode (Call Script...) zurückgeliefert.
Das Standardverhalten des Interpreters ist es, mit der Abarbeitung von Events aufzuhören sobald eine der command_xxx Methoden false zurückliefert.

Fazit: Führt man ein Script aus, welches am Ende einen Ausdruck hat der false liefern könnte, sollte man nachher ein Dummystatement setzen, sofern nicht beabsichtigt ist mit diesem Statement zu entscheiden ob der Interpreter weiterlaufen soll. Ein einfaches true würde dabei genügen.