我正在开发一款游戏,我想出了一个相当有趣的问题:聪明的方法来绘制星空.
这是一个2D游戏,所以动作可以在X和Y方向滚动.此外,我们可以调整比例以显示更多或更少的游戏区域.我也希望星空有假视差来给人一种深度印象.
现在我以传统的方式做这件事,通过拥有大量的星星,每个星星都被"深度"因子标记.为了绘制,我根据相机位置乘以"深度"来翻译每个星星,因此一些星星会移动很多,有些星星移动一点.这一切都很好,但当然因为我的阵列中有一定数量的星星,所以当相机移动太远或者我们缩小太多时会出现问题.这将全部奏效,但涉及大量代码和特殊情况.
这冒犯了我的优雅感.有一种更好的方法来实现这一目标.
我已经考虑过程序生成我的星星,它允许我拥有无限数量:例如,通过使用固定种子和PRNG来确定坐标.我需要将天空划分为瓷砖,通过散列瓷砖坐标生成种子,然后绘制每个瓷砖100颗星.这允许我无限期地向所有方向延伸我的星空,同时仍然只需要考虑可见的瓦片 - 但这不适用于"深度"因素,因为这允许星星在他们的瓦片外偏离.我可以简单地使用这种算法使用多层非视差星场,但这让我感到作弊.
当然,我需要每一帧完成所有这些,所以它必须快速.
你们都觉得怎么样?
我想要一个类似于boost的安全C++指针容器scoped_ptr,但具有类似于值的复制语义.我打算在应用程序的最内层循环中将这个用于非常少使用的类的极少使用的元素,以获得更好的内存局部性.换句话说,只要它的"内联"内存负载很小,我就不关心这个类的性能.
我从以下开始,但我不是那么熟练; 以下是安全的吗?我是否重新发明轮子,如果是这样,我应该在哪里看?
template <typename T>
class copy_ptr {
T* item;
public:
explicit copy_ptr() : item(0) {}
explicit copy_ptr(T const& existingItem) : item(new T(existingItem)) {}
copy_ptr(copy_ptr<T> const & other) : item(new T(*other.item)) {}
~copy_ptr() { delete item;item=0;}
T * get() const {return item;}
T & operator*() const {return *item;}
T * operator->() const {return item;}
};
Run Code Online (Sandbox Code Playgroud)
编辑:是的,这是故意的,它的行为与正常值非常相似.分析表明该算法在其他方面相当有效,但有时会因缓存未命中而受到阻碍.因此,我试图通过提取当前包含在值中但实际上并未在最内层循环中使用的大blob来减小对象的大小.我宁愿在没有语义变化的情况下这样做 - 一个简单的模板包装器将是理想的.
在Android中如何将值更改为负数?
如果我有以下代码并输入10 pos1_deg,我怎样才能使用单选按钮轻松将其更改为-10?连接字符串的答案是pos1_deg = "-" + pos1_deg什么?或者我可以使用一些数学命令?
pos1_deg =(EditText)findViewById(R.id.sat1posdeg);
pos1_deg.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL);
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助
在函数式编程(FP)上下文中使用面向对象编程(OOP)有什么好处吗?
我一直在使用F#已经有一段时间了,我注意到我的函数越多,无状态,我就越不需要将它们作为对象的方法.特别是,依靠类型推断使它们在尽可能多的情况下可用是有利的.
这并不排除需要某种形式的名称空间,这与OOP正交.也不鼓励使用数据结构.实际上,FP语言的实际使用在很大程度上依赖于数据结构.如果你看一下F Sharp Programming/Advanced Data Structures中实现的F#堆栈,你会发现它不是面向对象的.
在我看来,OOP与使用对象状态的方法主要是为了改变对象有很大的联系.在纯FP环境中,不需要也不需要.
一个实际的原因可能是能够与OOP代码交互,就像F#与.NET一样.除此之外,有什么理由吗?Haskell世界的经验是什么,编程是更纯粹的FP?
我将非常感谢有关该问题的论文或反事实现实世界的例子.
我在Android中使用animationdrawable时遇到了一个常见问题.我希望在Activity开始时在onCreate()方法中启动动画,但是正如许多人发现的那样,它不起作用.
我已经阅读了很多建议,但似乎没有什么对我有用.如果我在onClick()中启动动画它可以工作,它需要用户输入,而不是立即启动.
我尝试在onCreate()中的一个单独的线程中启动它,但这也不起作用.我在这里读到:
http://code.google.com/p/android/issues/detail?id=1818
但没有一条建议奏效,或者我无法理解.
有人可以帮忙吗?
这就是我想要做的.
我有一个名为Agui的文件夹,它是lib的文件夹.在该文件夹中有另一个名为Widgets的文件夹.我想从Agui/Widgets到Agui文件夹中的#include base.h文件.我该怎么做才能保持跨平台?我应该简单地包括<Agui/base.h>?
谢谢
我想通过ssh远程启动脚本,如下所示:
ssh user@remote.org -t 'cd my/dir && ./myscript data my@email.com'
Run Code Online (Sandbox Code Playgroud)
该脚本执行各种工作正常,直到与nohup行:
nohup time ./myprog $1 >my.log && mutt -a ${1%.*}/`basename $1` -a ${1%.*}/`basename ${1%.*}`.plt $2 < my.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)
它应该启动程序myprog,将其输出传递给mylog并发送一封电子邮件,其中包含myprog创建的一些数据文件作为附件,日志作为正文.虽然当脚本到达此行时,ssh输出:
与remote.org的连接已关闭.
这里有什么问题?
谢谢你的帮助
我想知道是否存在一些函数来自动格式化一个数字的小数,所以如果我有:
<?php
// $sql_result["col_number"] == 1,455.75
number_format ($sql_result["col_number"], 2, ".", "");
// will return 1455.75
// $sql_result["col_number"] == 1,455.00
number_format ($sql_result["col_number"], 2, ".", "");
// could I get 1455 instead of 1455.00?
?>
Run Code Online (Sandbox Code Playgroud)
所以我的答案是,如果我的DB中只有DECIMAL数据格式,那么如果确实存在一些删除小数的方法吗?
或者我应该做那样的事情?
<?php
// $sql_result["col_number"] == 1,455.00
str_replace(".00", "", (string)number_format ($sql_result["col_number"], 2, ".", ""));
// will return 1455
?>
Run Code Online (Sandbox Code Playgroud) 我有一个带有以下签名的方法:
public void foo(String... params);
Run Code Online (Sandbox Code Playgroud)
所以这些调用都是有效的:
foo("Peter", "John");
foo(new String[] { "Peter", "John" });
Run Code Online (Sandbox Code Playgroud)
但为什么这个无效?
foo("Peter", new String[] { "John" });
Run Code Online (Sandbox Code Playgroud) 我希望下一个会在一秒内打印"()"10次.但它在一秒钟之后就会挂起.为什么?
adaptE $ fmap print $ filterE (const True) $ atTimes [0.1, 0.2 ..]
Run Code Online (Sandbox Code Playgroud)
我发现它与filterE中使用的liftM有关:
filterE :: (Ord t, Bounded t) => (a -> Bool) -> EventG t a -> EventG t a
filterE p m = justE (liftM f m)
where
f a | p a = Just a
| otherwise = Nothing
Run Code Online (Sandbox Code Playgroud)
我试图重新实现filterE使用fmap它似乎工作.为什么?该标准filterE是如何设计使用的?
我发现自己重新实现很多通过所提供的标准功能reactive包(例如diffE,integrate).这是否意味着包装有错误或我以错误的方式使用它?
谢谢!