找回密码
 点一下
查看: 1302|回复: 18

关于x,y移动单位函数的问题

  [复制链接]
发表于 2009-10-12 20:13:46 | 显示全部楼层 |阅读模式
[jass]
    call SetUnitX(u,x)
    call SetUnitY(u,y)
[/jass]
J刚入门。。今天老师派发作业了
作业是‘用GC来做坐标移动单位’
计算单位面向距离的X和Y是
[jass]
local real x = GetLocationX(source) + dist * Cos(angle * bj_DEGTORAD)
local real y = GetLocationY(source) + dist * Sin(angle * bj_DEGTORAD)
[/jass]
这个昨天已经明白怎么计算了
但是要怎么利用GC、RETURN BUG来做呢?

虽然作业最好是独立完成。。不过我自己做了2个小时但是还是以失败告终。。
希望有人告诉我怎么用GC做坐标移动单位的函数

当然。。是指如果你明白我在说什么的话。。最近语言表达等级又下降了
发表于 2009-10-12 20:21:39 | 显示全部楼层
为什么是GC+return bug?为什么不是hashtable呢………………

简单的说嘛,GC的parentkey是timer的handle值,childkey随便你来,value纪录单位的handle值,然后handle到期时通过GC和timer的handle来获取单位数据,设置坐标
回复

使用道具 举报

发表于 2009-10-12 20:24:22 | 显示全部楼层
…………是想做击退嘛?
简单:
[jass]
globals
    gamecache GC = null
endglobals

function GetGC takes nothing returns gamecache
    if GC == null then
        call FlushGameCache( InitGameCache( "GC.w3v" ) )
        set GC = InitGameCache( "GC.w3v" )
    endif
    return GC
endfunction

constant function H2I takes handle h returns integer
    return h
    return 0
endfunction

constant function I2U takes integer i returns unit
    return i
    return null
endfunction

function Push_Act takes nothing returns nothing
    local string hs = I2S( H2I( GetExpiredTimer() ) )
    local unit u = I2U( GetStoredInteger( GetGC(), hs, "u" ) )
    local real dist = GetStoredReal( GetGC(), hs, "dist" )
    local real x = GetUnitX(u) + dist * Cos(GetUnitFacing(u) * bj_DEGTORAD)
    local real y = GetUnitY(u) + dist * Sin(GetUnitFacing(u) * bj_DEGTORAD)
    call SetUnitX( u, x )
    call SetUnitY( u, y )
    call FlushStoredMission( GetGC(), hs )
    call DestroyTimer( GetExpiredTimer() )
endfunction

function Push takes unit u, real dist, real time returns nothing
    local timer t = CreateTimer()
    local string hs = I2S( H2I( t ) )
    call StoreInteger( GetGC(), hs, "u", H2I( u ) )
    call StoreReal( GetGC(), hs, "dist", dist )
    call TimerStart( t, time, false, function Push_Act )
endfunction
[/jass]
在time秒后,将单位u向他面对的方向瞬移dist距离。
只是个小小的示范
回复

使用道具 举报

 楼主| 发表于 2009-10-12 20:25:10 | 显示全部楼层
因为直接改变X,Y不会打断单位的动画。。
而且也不必用到 点
那么,谢谢猪头的提醒和血戮的代码
回复

使用道具 举报

发表于 2009-10-12 20:25:18 | 显示全部楼层
引用第1楼zhuzeitou于2009-10-12 20:21发表的  :
为什么是GC+return bug?为什么不是hashtable呢………………

简单的说嘛,GC的parentkey是timer的handle值,childkey随便你来,value纪录单位的handle值,然后handle到期时通过GC和timer的handle来获取单位数据,设置坐标

我也在想这个问题…………而且还指名要用ReturnBug……
用hashtable这个根本不需要。
回复

使用道具 举报

发表于 2009-10-12 20:26:35 | 显示全部楼层
引用第3楼蟋有的蟀于2009-10-12 20:25发表的  :
有点不能理解,是不是:
用gc储存实数,单位的X,Y,然后rm计时器到期后读取这个实数?

不需要存储坐标,直接存储整数,单位的h2i值
代码小血给出啦,其实我觉得给思路不给代码比较好……
回复

使用道具 举报

发表于 2009-10-12 20:28:53 | 显示全部楼层
…………JASS新手不需要思路……他需要的是代码…………
他还处于貌似不会写J,也就是还不能把自己的T翻译成J呢~
回复

使用道具 举报

 楼主| 发表于 2009-10-12 20:29:43 | 显示全部楼层

回 5楼(zhuzeitou) 的帖子

原来如此阿。。
虽然作业前提是要我独立完成。。不过我还是偷懒了。。
回复

使用道具 举报

发表于 2009-10-12 20:30:34 | 显示全部楼层
……………………话说教你的是谁啊…………
哎………………
回复

使用道具 举报

 楼主| 发表于 2009-10-12 20:30:55 | 显示全部楼层

回 6楼(血戮魔动冰) 的帖子

我就学了10来个小时
现在只能写、看懂一些简单的代码
而且要把自己的T写成J需要T转J后再进行修改
回复

使用道具 举报

 楼主| 发表于 2009-10-12 20:31:43 | 显示全部楼层

回 8楼(血戮魔动冰) 的帖子

everguo。。
回复

使用道具 举报

发表于 2009-10-12 20:35:17 | 显示全部楼层
guo也可以说是我的jass启蒙老师了,虽然只是看过他的教程,不过这也是我jass的起步
回复

使用道具 举报

发表于 2009-10-12 20:36:51 | 显示全部楼层
我也一直用T转J呢……
不过大部分时候是因为不知道对应的函数名……
偷偷转一下看看……
回复

使用道具 举报

 楼主| 发表于 2009-10-12 20:37:28 | 显示全部楼层
关键在于,以前我看的Jass教程都是枯燥的
他的启蒙方法YD,再加上月协的那个YD教程
不知不觉,就入门了
回复

使用道具 举报

发表于 2009-10-12 20:37:36 | 显示全部楼层
引用第10楼蟋有的蟀于2009-10-12 20:31发表的 回 8楼(血戮魔动冰) 的帖子 :
everguo。。

哦呵……哦呵……哦呵…………哦呵呵呵……[s:170][s:170]
回复

使用道具 举报

发表于 2009-10-12 20:39:58 | 显示全部楼层
话说我看很多遍他的教程
也没看明白
最后还是在GA翻帖子翻明白了returnbug
悲剧的是我先看明白的是unionbug
……
回复

使用道具 举报

 楼主| 发表于 2009-10-12 20:40:01 | 显示全部楼层
猪头。。血戮。。
我有个猥琐的请求。。能不能。把这个帖子沉了
不然被果子知道我偷懒了肯定给我0分别想毕业了
回复

使用道具 举报

发表于 2009-10-12 20:40:33 | 显示全部楼层
不行!
回复

使用道具 举报

 楼主| 发表于 2009-10-12 20:41:14 | 显示全部楼层
啊。。 那我去买包炸药把这帖子炸了吧- -
他说。。如果作业不是独立完成不给分数
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-25 21:25 , Processed in 0.035279 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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