Project1
标题:
【算法时间】如何让一个精灵围绕着屏幕中心公转?
[打印本页]
作者:
上帝的眼睛
时间:
2010-7-7 22:56
标题:
【算法时间】如何让一个精灵围绕着屏幕中心公转?
咱表示咱是为了活跃被SSD同学们僵化的大脑……
天天看着$game_XXXX $data_XXXX Scene_XXXX觉得大脑都不会思考了,所以决定来这里找一下灵感
当然,作为出题者,也是提供了相当丰厚的奖励的……同时我也会派遣马甲来这里回答问题(= =|||)
如果除了我的马甲没有人把答案上交的话那么就很可怜……这1VIP就物归原主了……
下面提供框架,具体实现脚本请自己YY
class Scene_Demo
def main
@tip = Sprite.new(Viewport.new(0,0,640,480))
@tip.bitmap = Bitmap.new(12*32,32)
@tip.bitmap.draw_text(0,0,12*32,32,"这只是精灵移动的演示",1)
@sprite = Sprite.new(Viewport.new(0,0,640,480))
@sprite.bitmap = Bitmap.new("Graphics/Battlers/001-Fighter01") #咱表示这个图片可以随意……
#此处添加脚本
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果切换画面就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
@tip.dispose
@sprite.dispose
end
def update
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换的地图画面
$scene = Scene_Map.new
return
end
#此处添加脚本
end
end
复制代码
作者:
zhangbanxian
时间:
2010-7-7 22:56
放个最弱智的算法。
class Scene_Demo
def initialize
@半径 = 200
@度数 = 0
end
def main
@tip = Sprite.new(Viewport.new(0,0,640,480))
@tip.bitmap = Bitmap.new(12*32,32)
@tip.bitmap.draw_text(0,0,12*32,32,"这只是精灵移动的演示",1)
@sprite = Sprite.new(Viewport.new(0,0,640,480))
@sprite.bitmap = Bitmap.new("Graphics/Battlers/001-Fighter01") #咱表示这个图片可以随意……
#此处添加脚本
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果切换画面就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
@tip.dispose
@sprite.dispose
end
def update
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换的地图画面
$scene = Scene_Map.new
return
end
#此处添加脚本
@度数 += 0.1
@sprite.x = Math.sin(@度数) * @半径 + 320
@sprite.y = Math.cos(@度数) * @半径 + 240
end
end
复制代码
作者:
wbsy8241
时间:
2010-7-7 23:58
class Scene_Demo
def main
@tip = Sprite.new(Viewport.new(0,0,640,480))
@tip.bitmap = Bitmap.new(12*32,32)
@tip.bitmap.draw_text(0,0,12*32,32,"这只是精灵移动的演示",1)
@sprite = Sprite.new(Viewport.new(0,0,640,480))
@sprite.bitmap = Bitmap.new("Graphics/Battlers/001-Fighter01") #咱表示这个图片可以随意……
#此处添加脚本 #│
@x = 320 #目标点 #│
@y = 240 #目标点 #│
@sprite.ox = @sprite.bitmap.width/2 #│
@sprite.oy = @sprite.bitmap.height/2 #├NEW
@s = 0 #│
@speed = 5 # 旋转速度 #│
@a = 100 # 旋转直径 #│
@pi = 3.141592653 #│
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果切换画面就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
@tip.dispose
@sprite.dispose
end
def update
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换的地图画面
$scene = Scene_Map.new
return
end
#此处添加脚本
@s += @speed #│
@sprite.angle = @s #│
@sprite.x = Math.sin(@s*@pi/180) * @a + @x #├NEW
@sprite.y = Math.cos(@s*@pi/180) * @a + @y #│
end
end
复制代码
作者:
紫苏
时间:
2010-7-8 02:10
(x-w)^2+(x-h)^2=r^2 的方法:
class Scene_Demo
RADIUS = 50
DIR = 1 # {0, 1}
SPEED = 1
RADIUS2 = RADIUS * RADIUS
OX = 320
OY = 240
OFFSET = RADIUS / Math.sqrt(2)
X1 = OX - OFFSET
X2 = OX + OFFSET
Y1 = OY - OFFSET
def main
@tip = Sprite.new(Viewport.new(0,0,640,480))
@tip.bitmap = Bitmap.new(640, 480)
@tip.bitmap.draw_text(0,0,12*32,32,"这只是精灵移动的演示",1)
@sprite = Sprite.new(Viewport.new(0,0,640,480))
@sprite.bitmap = Bitmap.new("Graphics/Battlers/001-Fighter01") #咱表示这个图片可以随意……
@sprite.ox = @sprite.bitmap.width >> 1
@sprite.oy = @sprite.bitmap.height >> 1
#此处添加脚本
@sprite.x = OX - RADIUS
@sprite.y = OY
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果切换画面就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
@tip.dispose
@sprite.dispose
end
def update
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换的地图画面
$scene = Scene_Map.new
return
end
#此处添加脚本
x = @sprite.x
y = @sprite.y
dir = [:+, :-]
if x >= X1 && x <= X2
x = @sprite.send(:x=, x.send(dir[y <= Y1 ? ~DIR : DIR], SPEED)) - OX
y = Math.sqrt(RADIUS2 - x * x)
@sprite.y = (@sprite.y <= OY ? OY - y : y + OY).round
else
y = @sprite.send(:y=, y.send(dir[x <= X1 ? DIR : ~DIR], SPEED)) - OY
x = Math.sqrt(RADIUS2 - y * y)
@sprite.x = (@sprite.x <= OX ? OX - x : x + OX).round
end
@tip.bitmap.set_pixel(@sprite.x, @sprite.y, Color.new(255, 0, 0))
end
end
复制代码
作者:
败笔
时间:
2010-7-8 02:40
本帖最后由 败笔 于 2010-7-8 15:26 编辑
class Scene_Demo
def main
@tip = Sprite.new(Viewport.new(0,0,640,480))
@tip.bitmap = Bitmap.new(12*32,32)
@tip.bitmap.draw_text(0,0,12*32,32,"这只是精灵移动的演示",1)
@sprite = Sprite.new(Viewport.new(0,0,640,480))
@sprite.bitmap = Bitmap.new("Graphics/Battlers/001-Fighter01") #咱表示这个图片可以随意……
#此处添加脚本
@sprite.x = 320
@sprite.y = 240
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果切换画面就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
@tip.dispose
@sprite.dispose
end
def update
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换的地图画面
$scene = Scene_Map.new
return
end
#此处添加脚本
@sprite.angle += 5
end
end
复制代码
作者:
kukurui00
时间:
2010-7-8 08:48
哇 人才很多啊
作者:
IamI
时间:
2010-7-8 11:37
偷天换柱,小声路过
class Scene_Demo
def main
@tip = Sprite.new(Viewport.new(0,0,640,480))
@tip.bitmap = Bitmap.new(12*32,32)
@tip.bitmap.draw_text(0,0,12*32,32,"这只是精灵移动的演示",1)
@sprite = Sprite.new(Viewport.new(0,0,640,480))
@sprite.bitmap = Bitmap.new("Graphics/Battlers/001-Fighter01") #咱表示这个图片可以随意……
b = Bitmap.new(640,480)
b.blt(20,20,@sprite.bitmap,@sprite.bitmap.rect)
@sprite.bitmap.dispose
@sprite.bitmap = b
@sprite.ox = @sprite.x = 320
@sprite.oy = @sprite.y = 240
#此处添加脚本
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果切换画面就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
@tip.dispose
@sprite.dispose
end
RAD = 1 / Math::PI
def update
@sprite.angle += RAD
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换的地图画面
$scene = Scene_Map.new
return
end
#此处添加脚本
end
end
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1