C_Sharp 板


LINE

我原本的做法,是传递变数的位址给建构子 mySprite1 = new ClassSprite(texture, new Vector2(0f, 0f), &this.WindowX, &this.WindowY); 但是编译器不给过,逼我把它改成这样 fixed(int* WX = &this.WindowX,WY = &this.WindowY) { mySprite1 = new ClassSprite(texture, new Vector2(0f, 0f), WX, WY); } http://msdn.microsoft.com/zh-tw/library/f58wzh21.aspx 看一看MSDN的fixed说明,我也搞不太懂这是干什麽用的..... 指标在基础教学书上几乎都没提,顶多提一下下 而且又有delegate ref out可以用,几乎都用不到 所以我对指标的概念仅止於「这是变数的位址」而已 另外,我原本的想法是: 把变数的位址传给class,让那个class用私有栏位把指标记录下来 当变数改变的时候,就不用特别去更新那个class的数据 unsafe class ClassSprite { ...... public int* WindowX; public int* WindowY; public ClassSprite(Texture2D texture, Vector2 position, int* WindowX, int* WindowY) { ...... this.WindowX = WindowX; this.WindowY = WindowY; } ...... 到目前为止,写几个小程式来测试都OK 但是看到MSDN这句: 如果没有 fixed,Managed 变数的指标也许没有多大用处,因为记忆体回收可能 会在非预期下重新配置变数。C# 编译器只能让您将指标指派到 fixed 陈述式中 的 Managed 变数。 我请问..... 这是不是说..... 我想出来的那种方法有机绿会发生意外,只是我还没遇到? 如果是,那有办法可以解决吗? -- 我... 我一点都不糟糕啦!>///< --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.27.109.99
1F:→ james732:比较好奇的是你想要做什麽事呢? 04/18 03:22
这个是拿xna书上的教学范例来改的,他原本是用vector2记录 视窗的宽跟高,然後在update里记算撞到视窗後的反弹 我试着把视窗改成可变动大小,因此,需要让游戏原件里记录的 视窗宽高跟着变。 方法一:是采用this.Window.ClientSizeChanged事件,在视窗 变动时,从程式主体去修改原件的变数,这很简单,我也试成功 了。 但是考虑到,如果游戏变大的话,场上会有一大堆的游戏原件, 逐一修改很费事,就打算用指标(方法二)。 虽然有遇到视窗宽高是属性不能传位址的状况,但那个拐个弯就 能解决。 this.Window.ClientSizeChanged += new EventHandler(Window_ClientSizeChanged); void Window_ClientSizeChanged(object sender, EventArgs e) { this.WindowX = this.graphics.GraphicsDevice.Viewport.Width; this.WindowY = this.graphics.GraphicsDevice.Viewport.Height; } 然後,把this.WindowX、this.WindowY的位址传出去就好。 ※ 编辑: F23ko 来自: 163.27.109.99 (04/18 03:39) ※ 编辑: F23ko 来自: 163.27.109.99 (04/18 03:40)
2F:→ jhchou:fixed就是叫CLR暂时不要动fixed变数在记忆体中的位置 04/18 11:52
3F:→ jhchou:这样才能用指标直接操作 04/18 11:52
4F:→ jhchou:通常会用到指标都是要对记忆体大量读写 04/18 12:03
5F:→ jhchou:你的例子看起来没有用到指标的必要啊 让ClassSprite直接存 04/18 12:06
6F:→ jhchou:现在window的reference就好了 04/18 12:07
7F:→ F23ko:咦? 实执型别的指标跟参考型别的refernce是不一样的意思喔? 04/18 13:48
8F:→ F23ko:我还以为是类似的东西.... 04/18 13:48
9F:→ F23ko:谢谢,我觉得我需要去读一些基层的东西.... 04/18 13:59
10F:推 horngsh:要弄清楚何谓value type variable and reference variable 04/20 08:45
11F:推 horngsh:C#里是用ref or out加在实际参数前作call by address. 04/20 08:47
12F:→ F23ko:对,但是使用ref跟out,都没办法储存变数的参考位址,一定要 04/20 09:33
13F:→ F23ko:用指标.... 04/20 09:33
14F:→ F23ko:例如 04/20 09:36
15F:→ F23ko:void Func1(ref int X){ 04/20 09:36
16F:→ F23ko:int X2 = X; //存的是「值」而不是参照 04/20 09:37
17F:推 horngsh:C#里用ref or out的最大目的是产生side effect, 也就是要 04/20 13:37
18F:推 horngsh:改变原呼叫方法中的实际参数的内容... 04/20 13:37
19F:推 horngsh:最简单的例子是写一个MySwap(int x, int y)..实作看看就知 04/20 13:39
20F:→ F23ko:msdn这个方面写的蛮清楚的。 04/20 14:29
21F:→ help0430:你会不会想的太复杂了~要比较的时候再取得画面长宽即可 04/21 22:07







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP