设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

【4月13日更新】≮炸弹人≯【教程、范例,手稿】 - 人人可

查看数: 7922 | 评论数: 14 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2012-4-4 14:10

正文摘要:

本帖最后由 end55rpg 于 2012-5-6 21:43 编辑 让我们来学着做一个炸弹人游戏吧! 4月4号                          &n ...

回复

1745236314 发表于 2015-8-31 07:40:34
不用管我挖没挖坟,我是来学习的,这么精品的帖子沉在下边= =

点评

可是图片还是没补回来,现在沉了我还是学不了  发表于 2015-9-5 14:24
我说的是这条回复……上一个回帖没问题……  发表于 2015-9-5 14:15
什么啊,图片失效了!!!我学不了了!!!!!!!!!!  发表于 2015-9-5 14:09
然而你这算无意义回复……  发表于 2015-9-5 13:34
1745236314 发表于 2015-8-31 07:39:34
我还要学呢图片怎么失效了啊{:4_147:}{:4_147:}
yyq8092 发表于 2013-9-10 15:00:29
lz写的真可怕,一个这样的游戏需要那么多脚本吗?
雷欧亦炫 发表于 2013-9-8 08:20:41
谢谢教程,收下了

点评

你是不是挖坟了……  发表于 2013-9-8 12:12
chd114 发表于 2012-5-16 13:37:23
和魔塔样板不兼容···

点评

炸弹人+魔塔,这样不好哦,魔塔像素太低咯  发表于 2012-5-16 18:42
⊙﹏⊙b汗  发表于 2012-5-16 18:41
end55rpg 发表于 2012-4-14 13:22:17
wyongcan2008 发表于 2012-4-14 13:03
我想还可以优化一下,在泡泡的判断中
如果炮炮威力*4+1>地图事件数,
就循环所有事件来判断,

的你代码看得云里雾里,你的文字我怎么理解不了了?请再说详细点吧

点评

大哥。你的判断5次还不是需要遍历所有事件才能够判断坐标在范围内?  发表于 2012-4-14 19:58
不是,如果泡泡威力是1,那么按炸到的地方来判断就只要判断5次,也就是上下左右和中间,如果这个次数大于地图上的事件数就遍历地图的事件  发表于 2012-4-14 13:33
炮炮威力*4+1>地图事件数 难道是奇特的公式?  发表于 2012-4-14 13:23
wyongcan2008 发表于 2012-4-14 13:03:18
本帖最后由 wyongcan2008 于 2012-4-14 13:05 编辑

我想还可以优化一下,在泡泡的判断中
如果炮炮威力*4+1>地图事件数,
就循环所有事件来判断,
如果小于的话就循环判断泡泡炸到的位置有没有事件。

我按照的做eventinfo的想法自己写了段脚本,用到了提取放置物脚本简洁版。
不过你说的事件是移动的这一点还真没考虑到。
  1. module Event
  2.   def self.xy_tos (x,y)
  3.     ox = x.to_s
  4.     oy = y.to_s
  5.     while ox.size < 3
  6.       ox = "0" + ox
  7.     end
  8.     while oy.size < 3
  9.       oy = "0" + oy
  10.     end
  11.     ox + oy
  12.   end
  13.   def self.id_byxy(x,y)
  14.     $game_map.eventinfo[xy_tos(x,y)]
  15.   end
  16.   def self.id_byxys(xy)
  17.     $game_map.eventinfo[xy]
  18.   end
  19.   def self.event_byxy(x,y)
  20.     $game_map.events[$game_map.eventinfo[xy_tos(x,y)]]
  21.   end
  22.   def self.event_byxys(xy)
  23.     $game_map.events[$game_map.eventinfo[xy]]
  24.   end
  25. end

  26. module Drop_Item
  27.     def self.make_events(map_id,event_id,item_x,item_y,save=false)
  28.       return unless self.is_map?        
  29.       map = load_data(sprintf("Data/Map%03d.rxdata", map_id))     
  30.       temp = Marshal.load(Marshal.dump(map))      
  31.       if !$game_system.map_events_number
  32.          $game_system.map_events_number = {}
  33.       end  
  34.       sum = $game_system.map_events_number      
  35.       m_id = $game_map.map_id      
  36.       sum[m_id] == nil ? sum[m_id] = 2000 : sum[m_id] += 1
  37.       new_event_id = sum[m_id]      
  38.       temp.events[event_id].id = new_event_id      
  39.       temp.events[event_id].x,temp.events[event_id].y = item_x,item_y      
  40.       $game_map.events[new_event_id] = Game_Event.new(m_id,temp.events[event_id])
  41.       #在添加事件时将事件也添加到eventinfo
  42.       $game_map.eventinfo[Event.xy_tos(item_x,item_y)] = new_event_id
  43.       refresh_map   
  44.   end
  45.    
  46.   def self.delete_events(event_id)
  47.       return unless self.is_map?   
  48.       #在删除事件时将eventinfo中的事件也删除
  49.       $game_map.eventinfo.delete(Event.xy_tos($game_map.events[event_id].x,$game_map.events[event_id].y))
  50.       $game_map.events.delete(event_id)
  51.       self.refresh_map
  52.   end
  53. end

  54. class Game_Map
  55.     attr_reader   :eventinfo                # 事件信息
  56.   #--------------------------------------------------------------------------
  57.   # ● 设置
  58.   #     map_id : 地图 ID
  59.   #--------------------------------------------------------------------------
  60.   def setup(map_id)
  61.     # 地图 ID 记录到 @map_id
  62.     @map_id = map_id
  63.     # 地图文件装载后、设置到 @map
  64.     @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
  65.     # 定义实例变量设置地图元件信息
  66.     tileset = $data_tilesets[@map.tileset_id]
  67.     @tileset_name = tileset.tileset_name
  68.     @autotile_names = tileset.autotile_names
  69.     @panorama_name = tileset.panorama_name
  70.     @panorama_hue = tileset.panorama_hue
  71.     @fog_name = tileset.fog_name
  72.     @fog_hue = tileset.fog_hue
  73.     @fog_opacity = tileset.fog_opacity
  74.     @fog_blend_type = tileset.fog_blend_type
  75.     @fog_zoom = tileset.fog_zoom
  76.     @fog_sx = tileset.fog_sx
  77.     @fog_sy = tileset.fog_sy
  78.     @battleback_name = tileset.battleback_name
  79.     @passages = tileset.passages
  80.     @priorities = tileset.priorities
  81.     @terrain_tags = tileset.terrain_tags
  82.     # 初始化显示坐标
  83.     @display_x = 0
  84.     @display_y = 0
  85.     # 清除刷新要求标志
  86.     @need_refresh = false
  87.     # 设置地图事件数据************
  88.     @events = {}
  89.     @eventinfo = {}
  90.     for i in @map.events.keys
  91.       @events[i] = Game_Event.new(@map_id, @map.events[i])
  92.       @eventinfo[Event.xy_tos(@events[i].x,@events[i].y)] = i #####
  93.     end
  94.     # 设置公共事件数据
  95.     @common_events = {}
  96.     for i in 1...$data_common_events.size
  97.       @common_events[i] = Game_CommonEvent.new(i)
  98.     end
  99.     # 初始化雾的各种信息
  100.     @fog_ox = 0
  101.     @fog_oy = 0
  102.     @fog_tone = Tone.new(0, 0, 0, 0)
  103.     @fog_tone_target = Tone.new(0, 0, 0, 0)
  104.     @fog_tone_duration = 0
  105.     @fog_opacity_duration = 0
  106.     @fog_opacity_target = 0
  107.     # 初始化滚动信息
  108.     @scroll_direction = 2
  109.     @scroll_rest = 0
  110.     @scroll_speed = 4
  111.   end
  112. end

  113. class Game_Event < Game_Character
  114.   #--------------------------------------------------------------------------
  115.   # ● 暂时消失****
  116.   #--------------------------------------------------------------------------
  117.   def erase
  118.     @erased = true
  119.     $game_map.eventinfo.delete(Event.xy_tos(@x,@y))
  120.     refresh
  121.   end
  122. end
复制代码

点评

楼下  发表于 2012-4-14 19:57
end55rpg 发表于 2012-4-14 12:54:13
wyongcan2008 发表于 2012-4-14 12:50
对于取出指定位置的事件,我有个可以不循环所有事件的想法,就是在初始化events时,
一起初始个eventinfo的 ...

娃终于有知音来访了!您说的没错,好像我的泡泡脚本就是这样的,一个全局变量记录了事件的以ID为序的哈希组在放泡泡的时候更新一下这个变量然后读取。。。目前ver4.0泡泡脚本就是这样滴哦,效率不见得多大改进,因为地图上事件没有成百上千哦
wyongcan2008 发表于 2012-4-14 12:50:15
对于取出指定位置的事件,我有个可以不循环所有事件的想法,就是在初始化events时,
一起初始个eventinfo的哈希表,表的结构如下{"X坐标Y坐标" => 事件ID},这样要取出事件ID只需要
eventinfo就有了.

不知道实际运用怎么样

点评

只能{id => event}事件是要动的= =。,除非每刻都来个hash = ......= =  发表于 2012-4-14 12:58
end55rpg 发表于 2012-4-9 19:53:59
本帖最后由 end55rpg 于 2012-4-11 21:52 编辑
end55rpg 发表于 2012-4-5 19:13
@kimuafhjbfsa
给分啊!
分享快乐如此简单


@冰舞蝶恋
版主再来看看分值再来改改


‘‘──end55rpg于2012-4-11 14:13补充以下内容

[@]冰舞蝶恋[/@]版主求更新加分啊
我晕班主任快来
拿东西不回复者,可恶
’’


‘‘──end55rpg于2012-4-13 22:08补充以下内容

@kimu更新求查看
’’

点评

好吧  发表于 2012-4-14 13:03
已经没有提高分值的必要性了。  发表于 2012-4-14 13:00
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-23 05:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表