美文网首页
1小时开发《占星起源》(下)

1小时开发《占星起源》(下)

作者: 与时间赛跑_ | 来源:发表于2018-09-24 19:56 被阅读0次

hello,好像过了好长时间。

上一次在《占星起源》(中)的时候,布置好了星星和线段和星星接触后的一个算法,额,那确实是个不怎么高明的算法,这里想纠正一下。

弄得有些急,很多东西没有去完善(还有就是没有美术资源);

。。。。。

看一张图:

假设A B 线段要过蓝色小球,那么角BAC 一定会小于某一个值,同时角BCA 一定会大于某一值(保证AB线段的长度已定超过C)。

所以只要时刻监测这两个角度的关系即可判断是否想接触了。

下面是具体的检测函数:

(3个关节)

 float ab_angle=getMyAngle(sp1->getPosition(), sp->getPosition(), sp2->getPosition());

 float c_angle=getMyAngle(sp2->getPosition(), sp->getPosition(), sp1->getPosition());

 float bc_angle=getMyAngle(sp2->getPosition(), sp->getPosition(), sp3->getPosition());

 float d_angle=getMyAngle(sp3->getPosition(), sp->getPosition(), sp2->getPosition());

 log("%f",d_angle);

 log("ccc%f",bc_angle);

 if((ab_angle<3&&c_angle<90)||(bc_angle<3&&d_angle<90)){

    }else{

    }

float GameScene::getMyAngle(Point cen,Point fristPoint ,Point scendPoint){

 float dx1,dx2,dy1,dy2;

 float angle;

    dx1=fristPoint.x-cen.x;

    dx2=scendPoint.x-cen.x;

    dy1=fristPoint.y-cen.y;

    dy2=scendPoint.y-cen.y;

 float c=sqrtf(dx1*dx1+dy1*dy1)*sqrtf(dx2*dx2+dy2*dy2);

 if(c==0){

    }

 float p_angle=acosf((dx1*dx2+dy1*dy2)/c)/(3.1415)*180;

 return p_angle;

}

  上面用到了,求角度的方法,可以查阅之前的文章,里里面有很详细的讲解(这个函数我用了很多次了(《实现鲤的控制》里有说道))。

这个算法根据关节数的不同,相应的会变更。

接下来就要解决一些问题了;

每一关玩家所要完成的星星数量是不同的,所以检测数量也是不一样的。怎么样才能检测玩家把所有的星星都连接完了呢?

还记得上一次写星星类的时候吗,里面注明了一些会有变动的地方。

我们需要给已经连接好的星星一个标记,通过改变当中的值来模拟该星星是否已经被连接:

比如:

    void setOk(bool ok);//设置连接状态

 bool getOk();//获取连接状态

 bool isok;//用来记录是否被连接

void Star::setOk(bool ok){

 isok=ok;

}

bool Star::getOk(){

 return isok;

}

然后再检测的时候:

void GameScene::check(Star*sp){

//省略

 if((ab_angle<3&&c_angle<90)||(bc_angle<3&&d_angle<90)){

        sp->SMove();

        sp->setOk(true);//改变状态

    }else{

        sp->setOk(false);//改变状态

        sp->Setop();

    }

    }

最后,检测连接好的星星个数:

通过获取状态来判断个数(是不是很简单);

 int indx=0;

 for(auto it=pol->begin();it!=pol->end();it++){

 if((*it)->getOk()){

            indx++;

        }

2,玩家连接好所有的星星后,游戏本身应该有一个反馈。

最常见的就是结算界面了,这个其实是很简单的东西。

比如:

现在先简单说一下,这个结算界面必须是一个实体,如果只是在游戏中用图片和一些按钮的形式组合起来,整个界面如果要执行动作是会被跳过的。

再有,在玩家完成游戏的时候,例如游戏用时,分数也需要交给这个实体去处理:

比如它有这些方法:

    static ScoreLayer*create(int score);//创建

 virtual bool init(int score);//初始化

    ......

 void Show();//出现

 void Vis();

 void ShowStart();//星星个数

这里我是这样实现的(虽然不好看,也没有加入分数,你们可以在文章末尾获取到源码)

3.关卡问题:

游戏中有很多关卡,每个关卡的星星个数,位置都是不一样的,而且线段的额关节个数也是不一样的。

比如:

因为这里我只设置了5小关。所以不打算用读配置文件的方法创建关卡,如果你有兴趣也可以自己试着去尝试,比如读XML,TXT ,jison文件,都是可以的,下次如果有机会,也会详细的介绍这种方法。

因为这里比较简单,所以只是用了简单判断。

对了,有没有发现,现在的星星不是用小圆圈了,而是真的该用星星了(谢谢一位老哥发了一张图过来。)

而且当线段没有连接星星是星星是暗的,连接后星星是亮的,这里说一下,其实也没有什么技术含量,这里并没有使用shader。

看一张图:

他们是这样一个关系:

在游戏开始的时候,暗层就显示暗的星星,亮层则是为空的,接触的时候,就调用它的接口,让它亮起来,再次移走之后就把亮层移除。

代码地址:

http://pan.baidu.com/share/link?shareid=1814932273&uk=1435100278

(感觉这篇质量很不好,以后要继续加油)

拜~

相关文章

  • 1小时开发《占星起源》(下)

    hello,好像过了好长时间。 上一次在《占星起源》(中)的时候,布置好了星星和线段和星星接触后的一个算法,额,那...

  • 一小时开发《占星起源》(中)

    hello,一连好几天的雨。 《占星起源》星星的创建和游戏检测 回顾: 效果 上次把《占星起源》的“线段”弄好了,...

  • 古典占星与现代占星的区别?

    这个问题其实有点大,不太好讲清楚。 因为古典占星在先,承接了占星学的起源;现代占星是在古典占星的基础上发展而来。 ...

  • 一小时开发《占星起源》(上)

    hello ,当下天气非常炎热。 上一次一直上传视频不成功,现在终于行啦! 这里补充上一次的效果视频。。。 视频 ...

  • 【知乎】为啥中国的玄学体系会出那么多骗子?

    西方的主流玄学体系是占星, 古典占星起源于精确的天文观测和计算, 很多占星师不是天文学家就是数学家,排星盘需要复杂...

  • 《周易》?血型?手相?星座?再不研究殷商文化你就out了!

    看风水不如问卜, 占星术不如问卜, 看面相不如问卜, 大数据不如问卜! 不止上溯至文字起源, 更上溯至文字因何起源...

  • 起源(下)

    起源是什么,我用百度搜了搜,知道了起源起源就是,指事物的根源就是起源,我终于知道起源也是可以变成别的事物,但起源也...

  • 微信|占星-游戏-人生

    1】国内外占星 西洋占星术起源自古代巴比伦地区的,在他们的传播过程中,有的国家是用来占卜军事行动的,所以被发扬的比...

  • 说说我的爱好

    说占星也是我的一大爱好,很多人也许一头雾水。占星起源于西方,是通过出生时的星体位置对个人性格行为等的影响研究。 现...

  • 写在三十六岁(7)

    占星 从2020年后半年开始学习占星,到现在已经两年了,偶尔给别人看一下。心里还是没有从业的底气。但是占星...

网友评论

      本文标题:1小时开发《占星起源》(下)

      本文链接:https://www.haomeiwen.com/subject/zushoftx.html