愤怒的小鸟星球大战2,Shader.Find应该选哪个才能正确显示发射轨迹

愤怒的小鸟玩法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
愤怒的小鸟玩法
&&通关秘技!!!
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢&&&&&&&&&&&&&&&&&&
posts - 325,comments - 3,trackbacks - 0
Kiana最近沉迷于一款神奇的游戏无法自拔。
简单来说,这款游戏是在一个平面上进行的。
有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如的曲线,其中a,b是Kiana指定的参数,且必须满足a&0。
当小鸟落回地面(即x轴)时,它就会瞬间消失。
在游戏的某个关卡里,平面的第一象限中有n只绿色的小猪,其中第i只小猪所在的坐标为(xi,yi)。
如果某只小鸟的飞行轨迹经过了(xi,yi),那么第i只小猪就会被消灭掉,同时小鸟将会沿着原先的轨迹继续飞行;
如果一只小鸟的飞行轨迹没有经过(xi,yi),那么这只小鸟飞行的全过程就不会对第i只小猪产生任何影响。
例如,若两只小猪分别位于(1,3)和(3,3),Kiana可以选择发射一只飞行轨迹为的小鸟,这样两只小猪就会被这只小鸟一起消灭。
而这个游戏的目的,就是通过发射小鸟消灭所有的小猪。
这款神奇游戏的每个关卡对Kiana来说都很难,所以Kiana还输入了一些神秘的指令,使得自己能更轻松地完成这个游戏。这些指令将在【输入格式】中详述。
假设这款游戏一共有T个关卡,现在Kiana想知道,对于每一个关卡,至少需要发射多少只小鸟才能消灭所有的小猪。由于她不会算,所以希望由你告诉她。
输入输出格式
输入格式:
第一行包含一个正整数T,表示游戏的关卡总数。
下面依次输入这T个关卡的信息。每个关卡第一行包含两个非负整数n,m,分别表示该关卡中的小猪数量和Kiana输入的神秘指令类型。接下来的n行中,第i行包含两个正实数(xi,yi),表示第i只小猪坐标为(xi,yi)。数据保证同一个关卡中不存在两只坐标完全相同的小猪。
如果m=0,表示Kiana输入了一个没有任何作用的指令。
如果m=1,则这个关卡将会满足:至多用只小鸟即可消灭所有小猪。
如果m=2,则这个关卡将会满足:一定存在一种最优解,其中有一只小鸟消灭了至少只小猪。
保证1&=n&=18,0&=m&=2,0&xi,yi&10,输入中的实数均保留到小数点后两位。
上文中,符号和分别表示对c向上取整和向下取整
输出格式:
对每个关卡依次输出一行答案。
输出的每一行包含一个正整数,表示相应的关卡中,消灭所有小猪最少需要的小鸟数量
输入输出样例
输入样例#1:
输出样例#1:
输入样例#2:
输出样例#2:
输入样例#3:
输出样例#3:
【样例解释1】
这组数据中一共有两个关卡。
第一个关卡与【问题描述】中的情形相同,2只小猪分别位于(1.00,3.00)和 (3.00,3.00),只需发射一只飞行轨迹为y = -x^2 + 4x的小鸟即可消灭它们。
第二个关卡中有5只小猪,但经过观察我们可以发现它们的坐标都在抛物线 y = -x^2 + 6x上,故Kiana只需要发射一只小鸟即可消灭所有小猪。
【数据范围】
分析:说实话,比较简单的一道状压dp题,可以用一个状态i表示我们该射哪些鸟,dp[i]为在状态i下需要的抛物线的数量,那么可以很容易得到dp[i | 抛物线j射到的猪] = min(dp[i | 抛物线j射到的猪],dp[i] + 1),那么唯一的难点就是求出抛物线j射到哪些猪了,因为只需要2个点就可以确定一条抛物线,先枚举两头猪,确定一条抛物线,将a & 0的去掉,然后在枚举看哪些猪在这条抛物线上就可以了,不过需要注意的三个特殊情况:1.精度问题
2.抛物线可能只能打到一头猪 3.抛物线上两个点横坐标不能相同.
#include &cstdio&
#include &cstring&
#include &iostream&
#include &algorithm&
#include &queue&
#include &stack&
#include &cstdio&
#include &iostream&
#include &cstring&
#include &algorithm&
#include &string&
using namespace
int T, n, m,zhuangtai[<span style="color: #][<span style="color: #],dp[<span style="color: # && <span style="color: #];
struct node
}e[<span style="color: #];
bool jingdu(double a, double b)
return fabs(a - b) & 1e-<span style="color: #;
int main()
scanf("%d", &T);
while (T--)
memset(zhuangtai, <span style="color: #, sizeof(zhuangtai));
scanf("%d%d", &n, &m);
for (int i = <span style="color: #; i &= i++)
scanf("%lf%lf", &e[i].x, &e[i].y);
for (int i = <span style="color: #; i &= i++)
for (int j = i + <span style="color: #; j &= j++)
if (i != j)
if (jingdu(e[i].x, e[j].x))
double a = (e[j].y / e[j].x - e[i].y / e[i].x) / (e[j].x - e[i].x);
double b = e[i].y / e[i].x - a * e[i].x;
if (a &= <span style="color: #.0)
for (int k = <span style="color: #; k &= k++)
if (jingdu(a * e[k].x * e[k].x + b * e[k].x, e[k].y))
zhuangtai[i][j] |= (<span style="color: # && (k - <span style="color: #));
for (int i = <span style="color: #; i & (<span style="color: # && n); i++)
dp[i] = <span style="color: #;
dp[<span style="color: #] = <span style="color: #;
for (int i = <span style="color: #; i & (<span style="color: # && n); i++)
for (int j = <span style="color: #; j &= j++)
if (!(i & (<span style="color: # && (j - <span style="color: #))))
for (int k = k &= k++)
if (k == j)
dp[i | (<span style="color: # && (j - <span style="color: #))] = min(dp[i | (<span style="color: # && (j - <span style="color: #))], dp[i] + <span style="color: #);
if (jingdu(e[j].x, e[k].x))
dp[i | zhuangtai[j][k]] = min(dp[i | zhuangtai[j][k]], dp[i] + <span style="color: #);
printf("%d\n", dp[(<span style="color: # && n) - <span style="color: #]);
return <span style="color: #;
阅读(...) 评论()你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
大家好,我最近跟着龚老师的视频教程 《Unity3D愤怒的小鸟》,开发了愤怒的小鸟第一关,基本完成了。
不过目前有个小问题:
我的游戏在Unity Editor里运行,小鸟的轨迹是白色的(正常),如下图 1:
lineRenderer.material = new Material(Shader.Find("Particles/Additive"));
不过编译成可执行的exe文件后,在电脑上运行,那个轨迹就变成如下粉红色还很大,奇怪。如下图 2:
然后我试着把 Shader.Find("Particles/Additive") 改为 Shader.Find("Transparent/Diffuse")
这下,在Unity Editor里运行和编译成exe文件运行,轨迹都是偏黑色了,虽然大小正常了,但颜色还是不对。如下图 3:
请教,应该把 Shader.Find里的属性设为什么,才能正常显示白色的轨迹呢?
我的控制轨迹的C#文件内容如下(TraceLine.cs):
using UnityE
using System.C
public class TraceLine : MonoBehaviour {
public GameO // The particle system we created
private int lengthOfLineRenderer = 100;
private LineRenderer lineR
private int index = 0; // The index of the points of the line
private Vector3
private bool stopDrawing = // Stop drawing the line when the bird meets the ground
private GameObject myP
// Use this for initialization
void Start () {
lineRenderer = gameObject.AddComponent();
lineRenderer.material = new Material(Shader.Find("Particles/Additive"));
// lineRenderer.material = new Material(Shader.Find("Transparent/Diffuse"));
lineRenderer.SetColors(Color.white, Color.white);
lineRenderer.SetWidth(0.03f, 0.03f);
lineRenderer.SetVertexCount(1);
IEnumerator OnCollisionEnter(Collision collision) { // If the bird meets the ground, we stop the bird and also stop drawing the traceline
Slingshot.isDrawing = // Stop drawing the traceline
stopDrawing =
if (myParticles == null) { // Make sure that it only be created once
myParticles = (GameObject)Instantiate(particles, transform.position, Quaternion.identity); // The particle system for displaying the feather of bird when it hits something
yield return StartCoroutine(WaitForTime(2.0f));
gameObject.renderer.enabled = // Make bird(Clone) invisible
// Update is called once per frame
void Update () {
if (stopDrawing) {
transform.gameObject.rigidbody.velocity = new Vector3(0, transform.gameObject.rigidbody.velocity.y, transform.gameObject.rigidbody.velocity.z);
transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, 0);
lineRenderer = GetComponent();
position = transform.
if (Slingshot.isDrawing) {
lineRenderer.SetPosition(index, position);
if (index >= (lengthOfLineRenderer - 1)) {
lineRenderer.SetVertexCount(index+1);
lineRenderer.SetPosition(index, position);
IEnumerator WaitForTime(float seconds) {
yield return new WaitForSeconds(seconds);
new Material的时候用到了Shader.Find()方法,参数是一个字符串,这儿很容易出错;如果只是写错了字符还好,在UnityEditor中Run的时候就会报错,没有找到字符串所指的Shader。假如我们所有的材质球都是用代码new Material,然后Find Shader,就像上述代码所做的那样。Unity在编译的时候是忽略掉字符串的,Unity那么多内置的Shader是不会编译进去的,除非创建一个材质球,使用了某个Shader,并且这个材质球被场景中的某个GameObject引用,那么这个Shader才会被编译进最后的可执行文件中,才能用Find("XxxXxxx")在运行时找到。
你这轨迹不已正常显示出来了么
你这轨迹不已正常显示出来了么还没。在Unity Editor里是白色(正常),但是编译成可执行程序(.exe或者web application等)轨迹就变成第二张图的很粗的粉红色。。。如果我 把 Shader.Find("Particles/Additive") 改为 Shader.Find("Transparent/Diffuse") 则可执行程序里运行,轨迹是像第三张图一样,黑色的。
正在学习中。。。。
把你用到的Shader放到Resources文件夹下打包
变红色是贴图丢失了
没找到shader咯。说明你直接用Shader.Find的方法在导出的时候并没有导出你这里找的shader。所以把shader放到你的打包文件夹里就ok了。
具体的我也忘记了,不过我的是好的
Great, Thanks for share
楼主能分享一份源代码
你好,请问你的问题解决了吗?我也碰到差不多的是发布成apk。
要回复问题请先或
浏览: 2576
关注: 11 人愤怒的小鸟太空版HD选关版,愤怒的小鸟太空版HD选关版小游戏,4399小游戏
分类:&&|&&大小:10.70M&&|&&日期:
温馨提示:此游戏文件较大(10.70MB),加载时请耐心等待...
其他版本手机版本
鼠标拖动小鸟调整角度和力度,松开左键发射小鸟(数量有限),在空中时鼠标点击屏幕可使得蓝鸟分身、黑鸟爆炸、紫鸟改变轨迹。鼠标点击拖动画面可移动画面,点击右上角的[+][-]可缩放画面。
提示:红鸟按照预测轨迹运动;黑鸟发射后碰到物体或点击鼠标即可爆炸;蓝鸟发射后点击鼠标可分身为三只小鸟,扩大打击范围;而三角形的紫鸟发射后,点击鼠标就可改变运动轨迹,直接打击任意目标。
游戏加载完毕点击播放按钮 - 再点击关卡1 - 然后连续点击√即可开始游戏
成功地消灭掉所有的绿猪即可进入下一关哦!
请记住本站网址 ,点击,方便下次再玩。 《愤怒的小鸟太空版HD选关版》小游戏由4399用户提供。
相关游戏推荐
精彩专题推荐
12345678910
12345678910
文明办网文明上网举报电话:&|&举报邮箱:&||
Copyright & 2004 -
All Rights Reserved. 四三九九网络股份有限公司&版权所有
微信扫一扫关注4399小游戏

我要回帖

更多关于 愤怒的小鸟游戏大全 的文章

 

随机推荐