对了,这个架空层算不算建筑面积bug

分享次数:
游戏名称:这是我的战争
游戏制作:11 bit
游戏发行:11 bit
游戏平台:PC
上市时间:
游民指数:--
特色属性:  
经典游戏大作下载
热门游戏攻略推荐
最新下载推荐
近期游戏大作推荐
热点内容图文推荐
近期热点内容回顾
精彩视频推荐
Copyright&2003- All rights reserved. 游民星空 版权所有
冀ICP证B2-这个是BUG吗?我没看懂的设定。
提示: 这篇影评可能有剧透
  首先,QB的设定我不太明白。
  关于QB,它介绍过自己的特点有:“我所在的种族没有感情,感情这种东西只是精神疾病。”,“我从来不说谎,没有告诉你是因为你没有问我。”
  在第一集末尾和第二集开头,QB初遇小圆时,因为黑长直在追杀它而向小圆求救过:“塔斯开袋!”但是在后面某集,黑长直把QB打爆阻止它,旁边立刻出现另一只QB分身,满不在乎地把尸体吃掉。
  也就是说,其实刚开始黑长直追杀QB时,QB并没有必要向小圆求救是么!也就是说这个时候QB向小圆求救,已经在说谎了!而且,这种抱有目的的说谎,难道不是怀着感情的么?也就是,QB既会说谎又是有感情的。
  其实我很理解小玄这么编剧的意图,让QB声称自己不说谎,并解释魔法少女从希望到绝望的命运,这样观众才能看懂,而且更痛恨这淫兽了。这里做的效果还好,比很多动画里非要解释设定造成的硬伤已经强多了,比如魔法禁书目录,非要解析自己的招式,好让把妹之手破除……
  但是自相矛盾的设定如何解释的通?QB存在感情还可以解释,他们种族需要未成年少女的感情才能释放能量;可是QB说谎圆不上了吧?
  
  另外,我想对魔法少女和魔女的关系吐个槽。
  强大的魔法少女靠实力消灭了魔女,而注定会变成更强大的魔女,更强大的魔女又需要更更强大的魔法少女来消灭……这种系统是不稳定的,很容易走向崩溃的。就像沿着雪山山坡往下滚雪球,雪球会自发地越滚越快越滚越大。另外,QB似乎并无意保护地球的和平,在平行空间里它曾坐等小圆变成的魔女毁灭地球。所以人类是怎么活到现在的?
  
  其实还有其他的吐槽点,不过还是不提了。同好们来为我解惑吧?
  答案很简单,因为地球上不只一只QB,这种种有意识共享的能力,但它们没有感情,所以黑长直把一只QB打爆后,另一只QB出来时,会是满不在乎地把尸体吃掉
  这个我知道啊,我说的是QB向小圆求救是在说谎。
  虽然QB没有感情,但它做事是理性的、有目的性的,正常人被追杀,都会为求生而叫救命吧,从逻辑性来说,这样没说谎,就比如沙耶加在7集问QB为什么不告诉她灵核真相,它冷冷地说了一句“你没有问我”一样
  那后来黑长直打爆QB以后,另一只QB立刻走出来,它就不怕死了么?再分析多了就要扯行为心理学了吧。。。
  而且,QB自称没有感情,但当它对蓝毛得手的时候,那副贱样难道没有显得得意洋洋么?绝对的无感情是很难表达出来的。
  你是说第8集的吧?再简单不过了,因为第二只QB知道黑长直根本不会杀它(杀第1只是因为它差点就和小圆订立契约),黑长直自己都说过杀QB也于事无补,因为根本就杀不完(第1集杀QB是因为不想它与小圆接触,从令一个角度说,QB向小圆求救目的是为了和小圆接触)还有它对蓝毛得手后我没觉得它那里得意洋洋么,因为我觉得它的语气与脸部表情一直就是这个样子
  如果你是说第1集的话,当时根本没说清楚是那只QB在求救,也许两只也在叫呢!还是那句,黑长直杀QB是因为不想它与小圆接触,从令一个角度说,QB向小圆求救目的是为了和小圆接触
  亲,你的主角代入感得有多强……
  我觉得作为观众,不用帮角色们想理由,应该就事论事不要扩展。
  原文看到的就是,第一集里黑长直追杀受伤的QB,QB向小圆求救了。
  第八集里黑长直打爆QB之一,QB之二都不用求救,直接出现了。
  不是我代入,因为我看过小说版、公式设定集、老虚解说,当然也有些是圆吧讨伦出来的,不过相对来说还是比较合理的
  
  不过随你说是我代入感太高也好,YY也吧,故事中有些地方虽然没说得太清楚,但它就是有那方面的暗示,也因为这样,在2CH、CHEN、贴吧也会有这么多的讨论,我兴幸体会过那段日子,这也是这部动画魅力之一
  恩啊,我觉得理解设定是看懂全篇的关键。
  其实我一直不明白,QB还给魔法少女们许愿的机会干嘛,
  第三集里自己替她们许就好了。非得磨磨蹭蹭弄得第四集起小圆反悔。
  回头想想,这跟QB的说谎等设定有关系。
  那是因为当时还有麻美在场啦!QB自己都说过希望她们越早许愿越好,但作为前辈的麻美也心知道魔法少女不是什么好差事,她还是希望小圆她们先有个觉悟先
  那是因为当时还有麻美在场啦!QB自己都说过希望她们越早许愿越好,但作为前辈的麻美也心知道魔法少女不是什么好差事,她还是希望小圆她们先有个觉悟先,不要随随便便浪费自己的愿望
动画 / 悬疑 / 惊悚
悠木碧 / 斋藤千和 / 水桥薰 / 喜多村英梨
& 2005-, all rights reserved在《》这篇文章中我们谈到:当我们通过应用DependencyAttribute特性定义需要自动注入的属性的时候,当这个属性为接口、抽象类或者没有定义无参的构造函数,无论我们调用PolicyInjection的Create方法去创建一个新的对象,还是调用Wrap方法对现有对象进行封装,都会抛出一个ResolutionFailedException异常。之后根据园友的评论,又进行了后续的验证。如果说在前文中,我们还对这是否是个BUG抱着“谨慎”的态度,那么在这篇文章中,可以肯定地告诉你:这是一个BUG,而且是一个“致命”的BUG。
一、前景回顾
我们在重新回顾一下在《》中描述的问题。如果我们定义如下几个类型,Foo继承于MarshalByRefObject,里面具有一个类型为IBar的Bar属性,上面应用了DependencyAttribute特性使之成为一个“注入属性”。
1: public class Foo : MarshalByRefObject
[Dependency]
public IBar Bar { }
6: public interface IBar { }
7: public class Bar : IBar { }
当我们调用PolicyInjection.Create静态方法构建Foo对象的时候,会抛出如下图所示的ResolutionFailedException异常,错误信息表明缺乏对接口IBar的类型匹配所致。
二 、如何“解决”这个问题?
要解决这个问题就得解决对接口IBar的类型注册问题,但是PolicyInjection没有什么提供任何的API共我们进行类型的注册。不过,我们可以看看PolicyInjection的Create或者Wrap具体的实现原理。
1: public static class PolicyInjection
// Methods
public static TInterface Create&TObject, TInterface&(params object[] args) where TObject: TInterface
using (PolicyInjector policyInjector = new PolicyInjector(EnterpriseLibraryContainer.Current))
return policyInjector.Create&TObject, TInterface&(args);
public static TObject Create&TObject&(params object[] args)
using (PolicyInjector policyInjector = new PolicyInjector(EnterpriseLibraryContainer.Current))
return policyInjector.Create&TObject&(args);
public static object Create(Type typeToCreate, params object[] args)
using (PolicyInjector policyInjector = new PolicyInjector(EnterpriseLibraryContainer.Current))
return policyInjector.Create(typeToCreate, args);
public static object Create(Type typeToCreate, Type typeToReturn, params object[] args)
using (PolicyInjector policyInjector = new PolicyInjector(EnterpriseLibraryContainer.Current))
return policyInjector.Create(typeToCreate, typeToReturn, args);
public static TInterface Wrap&TInterface&(object instance)
using (PolicyInjector policyInjector = new PolicyInjector(EnterpriseLibraryContainer.Current))
return policyInjector.Wrap&TInterface&(instance);
public static object Wrap(Type typeToReturn, object instance)
using (PolicyInjector policyInjector = new PolicyInjector(EnterpriseLibraryContainer.Current))
return policyInjector.Wrap(typeToReturn, instance);
我们可以清楚地看到:最终完成对象的创建和封装的是通过一个叫做PolicyInjector的对象完成的。从下面的代码片断我们可以看出,PolicyInjector自己也定义了一系列Create和Wrap方法。
1: public class PolicyInjector : IDisposable
private IUnityC
public PolicyInjector(IConfigurationSource configurationSource);
public PolicyInjector(IServiceLocator serviceLocator);
public TInterface Create&TObject, TInterface&(params object[] args) where TObject: TI
public TObject Create&TObject&(params object[] args);
public object Create(Type typeToCreate, params object[] args);
public object Create(Type typeToCreate, Type typeToReturn, params object[] args);
public void Dispose();
public TInterface Wrap&TInterface&(object instance);
public object Wrap(Type typeToReturn, object instance);
我们说,PIAB完全Unity的机制进行对象的创建和封装,实际上体现在PolicyInjector通过一个UnityContainer对象来完成对象的创建和封装工作。如果我们直接通过PolicyInjector对象,而不是通过PolicyInjection这个外观类进行对象的封装,并且通过UnityContainer对象进行类型的注册,就可以避免上述异常的出现。具体实现如下:
1: static void Main(string[] args)
using (PolicyInjector injector = new PolicyInjector(ConfigurationSourceFactory.Create()))
var containerField = typeof(PolicyInjector).GetField(&container&, BindingFlags.Instance | BindingFlags.NonPublic);
IUnityContainer container = (IUnityContainer)containerField.GetValue(injector);
container.RegisterType&IBar, Bar&();
var foo = injector.Create&Foo&();
Console.WriteLine(&foo.Bar.GetType().Name: {0}&,foo.Bar.GetType().Name);
输出结果:
1: foo.Bar.GetType().Name: Bar
三、这真的是解决方案吗?
如果你足够仔细的话,在上面一节的标题中“解决”二字是加上引号的。我实际上在挖一个坑,诱使你往里跳:)。如果你真采用这个解决方案的话,一个“致命”的错误将会产生。
我们说过,PIAB的Create方法最终也是调用Wrap方法,而Wrap方法就会自作主张地去完成相应的注入工作——这本质上就是PIAB的BUG。我们说这个BUG足以致命,我可以通过一个简单的例子来说明这一点。假设我们具有如下的类型定义,Foo和IBar定义没有改变,现在我们定义两个具体的类Bar1和Bar2去实现IBar这个接口。
1: public class Foo : MarshalByRefObject
[Dependency]
public IBar Bar { }
6: public interface IBar { }
7: public class Bar1 : IBar { }
8: public class Bar2 : IBar { }
现在我们执行如下的代码:首先我们对IBar这个接口注册了匹配关系,让它直接映射到Bar1。然后我们创建一个Foo对象,并将Bar属性初始化成一个Bar2类型的对象,然后调用PolicyInjector的Wrap方法对Foo对象进行封装。通过输出结果,我们清楚地看到:Wrap方法的执行会按照我们注册的类型匹配关系重新设置了注入属性Bar的值,即类型为Bar1的对象。
1: static void Main(string[] args)
using (PolicyInjector injector = new PolicyInjector(ConfigurationSourceFactory.Create()))
var containerField = typeof(PolicyInjector).GetField(&container&, BindingFlags.Instance | BindingFlags.NonPublic);
IUnityContainer container = (IUnityContainer)containerField.GetValue(injector);
container.RegisterType&IBar, Bar1&();
var foo = new Foo();
foo.Bar = new Bar2();
Console.WriteLine(&foo.Bar.GetType().Name: {0}&, foo.Bar.GetType().Name);
foo = injector.Wrap&Foo&(foo);
Console.WriteLine(&foo.Bar.GetType().Name: {0}&, foo.Bar.GetType().Name);
输出结果:
1: foo.Bar.GetType().Name: Bar2
2: foo.Bar.GetType().Name: Bar1
四、方法注入一样有问题
依赖诸如具有三种典型的表现形式:构造注入、属性(设置)注入和方法(调用)注入。既然PolicyInjection的Wrap方法会自作主张地完成属性注入的工作,对于方法(调用)注入也不能幸免。对于这个问题,我们直接调用PolicyInjection的Wrap方法就可以模拟。
重新定义类型Foo,让它具有一个Int类型的属性Count,该属性通过一个应用了InjectionMethodAttribute特性的方法Initialize被初始化成-1。
1: public class Foo : MarshalByRefObject
public int Count { }
[InjectionMethod]
public void Initialize()
Count = -1;
现在,我们执行如下的代码,我们发现Wrap方法的调用篡改了我们实现设置的值(100-〉-1)。
1: static void Main(string[] args)
var foo = new Foo();
foo.Count = 100;
Console.WriteLine(&Before Wrapping: foo.Count = {0}&, foo.Count);
foo = PolicyInjection.Wrap&Foo&(foo);
Console.WriteLine(&After Wrapping : foo.Count = {0}&, foo.Count);
输出结果:
1: Before Wrapping: foo.Count = 100
2: After Wrapping : foo.Count = -1
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
阅读(...) 评论()后使用快捷导航没有帐号?
查看: 290|回复: 13
最后登录QQ注册时间阅读权限10精华0积分60帖子
二等兵, 积分 60, 距离下一级还需 90 积分
CPU 英特尔 Core i5-3450 (四核)
主板 华硕 P8H61-M LX3 PLUS R2.0 (Intel H61 (Cougar Point))
内存 4 GBytes
显卡 NVIDIA(英伟达) GeForce GTX 650, 1024 MBytes of GDDR5 SDRAM
硬盘 WDC WD5000AAKX-00ERMA0
网卡 瑞昱 Semiconductor RTL PCI-E Gigabit Ethernet NIC
声卡 英特尔 Cougar Point PCH - High Definition Audio Controller [B3]
这配置玩OL是没有问题的吧& && &你看你们的服务器 不是&&不可恢复的错误&&就是内存不够&&有意思吗& & 还有就是进入游戏了&&准备开始了 你给我卡死未响应了有意思吗& &&&我就想问TX你他妈有意思吗& && && && && && && && && &&&中部地区& & 网通& &**丶别撕我脱& && && && &
最后登录QQ注册时间阅读权限10精华0积分60帖子
二等兵, 积分 60, 距离下一级还需 90 积分
自己顶................................
最后登录QQ<dd title="590542注册时间阅读权限20精华0积分8070帖子
三等军士长, 积分 8070, 距离下一级还需 1930 积分
服务器会尽快修复这一问题的
Bug建议反馈区D组版主Memories丶
最后登录QQ注册时间阅读权限10精华0积分30帖子
列兵, 积分 30, 距离下一级还需 20 积分
修复到公测时都不一定修复的好,只希望别再出新版本了,越新越卡,想想都是泪
最后登录QQ注册时间阅读权限20精华0积分8440帖子
三等军士长, 积分 8440, 距离下一级还需 1560 积分
_小手冰凉_ 发表于
修复到公测时都不一定修复的好,只希望别再出新版本了,越新越卡,想想都是泪 ...
嘘!!知道就好。。不行咱换个游戏玩。。
吾系华北PVE砖家叫兽。
最后登录QQ注册时间阅读权限10精华0积分55帖子
二等兵, 积分 55, 距离下一级还需 95 积分
我随便开个图都卡到飞起~
最后登录QQ注册时间阅读权限10精华0积分650帖子
下士, 积分 650, 距离下一级还需 550 积分
我昨天折腾一天就玩了3局。
今天中午从装了系统。玩了一下午没出现那些问题了。
看下我帖子。
最后登录QQ注册时间阅读权限10精华0积分1185帖子
下士, 积分 1185, 距离下一级还需 15 积分
蜡笔小色 发表于
我昨天折腾一天就玩了3局。
今天中午从装了系统。玩了一下午没出现那些问题了。
看下我帖子。 ...
换系统就好了么?我这也准备换64位了内存添到8g不知道好不好使
我都换了8G
最后登录QQ<dd title="212535注册时间阅读权限20精华0积分3520帖子
上士, 积分 3520, 距离下一级还需 1480 积分
bug真心不是问题哦
最后登录QQ注册时间阅读权限10精华0积分650帖子
下士, 积分 650, 距离下一级还需 550 积分
妄念天 发表于
换系统就好了么?我这也准备换64位了内存添到8g不知道好不好使
我换64位的系统以后基本就没出过卡屏黑屏报错的问题。
装win7 64位旗舰版。希望能解决你的问题
4G内存就可以。8G更好了为了以后的游戏。
最后登录QQ注册时间阅读权限10精华0积分1185帖子
下士, 积分 1185, 距离下一级还需 15 积分
蜡笔小色 发表于
我换64位的系统以后基本就没出过卡屏黑屏报错的问题。
装win7 64位旗舰版。希望能解决你的问题
4G内存就 ...
呵呵谢谢最近没时间换得过几天 不过安心多了
最后登录QQ注册时间阅读权限10精华0积分585帖子
一等兵, 积分 585, 距离下一级还需 15 积分
蜡笔小色 发表于
我换64位的系统以后基本就没出过卡屏黑屏报错的问题。
装win7 64位旗舰版。希望能解决你的问题
4G内存就 ...
扯淡,64位系统照样卡屏。这是游戏本身的问题和配置无关
最后登录QQ注册时间阅读权限10精华0积分650帖子
下士, 积分 650, 距离下一级还需 550 积分
哲ZZ 发表于
扯淡,64位系统照样卡屏。这是游戏本身的问题和配置无关
我说的卡屏是直接无反应,黑屏,报错。不是游戏大厅里面那种卡屏。
已经有9个朋友解决了问题。
最后登录QQ注册时间阅读权限10精华0积分1005帖子
下士, 积分 1005, 距离下一级还需 195 积分
是TX& &都j8毛完蛋
回帖数大于300
经常帮助其他会员答疑
经常在论坛发帖,且发帖量较大
幸运四叶草
幸运四叶草
Powered by

我要回帖

更多关于 白悠然算不算 的文章

 

随机推荐