※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

require 'dxruby'
 
module EFTX
	#Image_Flash = Image.load("Image/flash.png")
	class Color < Array
		def initialize(a,b,c,d = nil)
			self.push a
			self.push b
			self.push c
			self.push d if d
		end
 
		def dark(value)
			result = [self[0]-value,self[1]-value,self[2]-value]
			result[0] = 0 if result[0] < 0
			result[1] = 0 if result[1] < 0
			result[2] = 0 if result[2] < 0
			return result
		end
 
		def light(value)
			result = [self[0]+value,self[1]+value,self[2]+value]
			result[0] = 255 if result[0] > 255
			result[1] = 255 if result[1] > 255
			result[2] = 255 if result[2] > 255
			return result
		end
	end
 
 
@font = Font.new( 22,"",{:weight => true})
@sprites = []
	def self.set(text,x,y,style = {})
		color = Color.new(50,255,200)
		font = Font.new(14,"",{:weight => true })
		image = Image.new(font.getWidth(text),font.size)
		image.drawFont(-1,-1,text,font,color.dark(120))
		image.drawFont(-1,1,text,font,color.dark(120))
		image.drawFont(1,-1,text,font,color.dark(120))
		image.drawFont(1,1,text,font,color.dark(120))
		image.drawFont(0,0,text,font,color.light(100))
		ary = text.split(//)
		p ary
		total_length = 0
		@x = x
		@y = y
 
		for i in 0...ary.size
			#total_length += font.getWidth(ary[i])
			@sprites.push EFTX::Character.new(
			image.slice(total_length,0,font.getWidth(ary[i]),font.size),
			x + rand(360)-180+total_length,
			y + rand(360)-180,
			x+total_length,
			y,
			6,
			false,
			i * 8
 
			)
			total_length += font.getWidth(ary[i])
		end
	end
	def self.update
		@sprites.each{|i|i.update}
	end
	class Character
		def initialize(image,sx,sy,dx,dy,spd,id,delay)
			@image = image
			@x = sx
			@y = sy
			@dx = dx
			@dy = dy
			@spd = spd
			@phase = 0
			@delay = delay
			@count = 0
			@alpha = 0
			@scale = 4
		end
 
		def in_scale
			if @scale > 1
				@scale -= 0.1
			else
				@scale += 0.01
			end
		end
 
		def alpha_increase
			@alpha += 5
			@alpha = 255 if @alpha > 255
		end
 
		def update_phase0#待機フェイズ
			@phase = 1 if @count == @delay
 
			@count += 1
		end
 
 
		def update_phase1
			@spd *= 0.95
			@spd = 1.5 if @spd < 1.5
			if (@dx - @x).abs < @spd*2 and (@dy - @y).abs < @spd*2
				@x = @dx
				@y = @dy
				@phase = 2
				#Window.drawEx(@x-96,@y-96,Image_Flash,{:blend => :add,:z => 50})
				@alpha = 255
				@scale = 1
			else
			rad = Math.atan2(@dy - @y,@dx - @x)
			rotation = rad * 180 / Math::PI
			vx = Math.cos( rotation * Math::PI / 180 ) * @spd
			vy = Math.sin( rotation * Math::PI / 180 ) * @spd
			@x += vx
			@y += vy
			end
			in_scale
			alpha_increase
		end
 
		def update_phase2
		end
 
		def update
			case @phase
			when 0
				update_phase0
			when 1
				update_phase1
			when 2
				update_phase2
			end
			Window.drawEx(@x,@y,@image,{:alpha => @alpha,:z => 0,:scalex => @scale, :scaley => @scale})
		end
	end
 
end
 
FONT = Font.new(16)
image = Image.new(640,480)
image.drawFont(100,100,"イベントホライゾン",FONT)
 
count = 0
Window.loop do
EFTX.set("EFTX.set(\"\",100,240,nil)",100,240,{}) if count == 0
EFTX.set("EFTX.set("",rand(600),rand(400),{})",rand(600),rand(400),{}) if count % 120 == 0
EFTX.update
Window.draw(50,150,image)
count += 1
end