用DDraw实现射击游戏阐发文档要点一:画图自动切割IDirectDrawSurface7::BltFast()方式中不自动切割成果,即当画图元素逾越窗口之外时不会自动切割,DDraw遴选自动漠视不画,组成一旦逾越窗口,画图元素会忽然磨灭。
处置这一下场的方式是手动切割,代码如下://自动切割 RECTscRect; //寄存之后窗口大小地域 ZeroMemory(&scRect,sizeof(scRect)); GetWindowRect(GetActiveWindow(),&scRect); //提防图片左上角逾越窗口左上角 if(xscRect.right?scRect.right:x; y=y>scRect.bottom?scRect.bottom:y; m_rect.right=x+m_rect.right-m_rect.left>scRect.right?scRect.right-x+m_rect.left:m_rect.right; m_rect.bottom=y+m_rect.bottom-m_rect.top>scRect.bottom?scRect.bottom-y+m_rect.top:m_rect.bottom;惟独将上述代码加在CGraphic::BltBBuffer()中的m_bRect=m_rect;前就可。
要点二:配景的滚轴实现 画配景能够分为如下三种情景: 情景一:配景图片与窗口等高 情景二:配景图片高度小于窗口高度 情景三:配景图片高度大于窗口高度上述教学图与代码相对于应地看,有助于约莫知道。
另外,要点一实现之后,由于已经能够自动切割,画配景能够用另外方式。
要点三:精灵图的实普通游戏中,如RPG游戏中的人物图、射击类游戏的飞机、爆炸等,叫做精灵图。
精灵图实际上是将齐全帧的图片放在一个文件中,游戏时靠一个RECT来抑制画图像文件中的哪一部份,进而抑制游戏展现哪一帧图,惟独抑制好RECT的位置就可。
如下图:抑制RECT的四个角的坐标的挪动,有如下代码:if(m_timeEnd–m_timeStart>100) //惟独到了100ms之后才画图 {m_ImageID++; if(m_ImageID-m_beginID>=num) { m_ImageID=m_beginID; //末了一帧的下一帧是第一帧 } m_timeStart=timeGetTime(); } intid=m_ImageID++; SetRect(&m_rect,41*id,0,41*(id+1),41); //飞机精灵图大小是41×41 m_pGraph->BltBBuffer(m_pImageBuffer,true,m_Pos.x,m_Pos.y,m_rect);如许就实现为了精敏捷画的下场。
要点四:拿STL举行枪弹的实现枪弹的实现能够使用STL中的vector,当按下开战键时收回一颗枪弹,就往vector中削减一个结点;
当枪弹飞出窗口或者击中敌机时,再将结点从vector中删除了。
每一帧游戏画面中枪弹翱翔时惟独将vector中的齐全枪弹举行处置、绘画就可。
参考代码如下:1.削减枪弹if(g_ctrlDown) //当ctrl键按下时开炮! { m_BulletEnd=m_Gtime->GetTime(); if((m_BulletEnd-m_BulletStart)*1000>120) //假如络续按着开战键不放,这里抑制不会收回太多枪弹 { m_BulletStart=m_BulletEnd; MBULLETtmpBullet; tmpBullet.pos.x=m_SPos.x-1; //记实开战时的枪弹位置 tmpBullet.pos.y=m_SPos.y-26; tmpBullet.speed=5; //该枪弹的翱翔速率 m_BulletList.push_back(tmpBullet); //将枪弹削减到vector中 } } 2.删除了枪弹vector::iteratoritei; //vector迭代器 for(itei=m_BulletList.begin();itei!=m_BulletList.end();itei++) //遍历齐全枪弹{m_BulletList.erase(itei); //删除了这个枪弹itei=m_BulletList.begin(); //删除了一个结点后,为防止侵蚀下次就重新查验if(m_BulletList.empty()) break; //若删除了结点后枪弹vector已经空则跳出轮回} 3.枪弹遍历处置vector::iteratoritei; //vector迭代器 for(itei=m_BulletList.begin();itei!=m_BulletList.end();itei++) //遍历齐全枪弹{itei->pos.y-=itei->speed; //枪弹翱翔}要点五:碰撞检测使用WindowsAPI函数RectInRegion:vector::iteratoritei; //vector迭代器for(itei=m_EnimyList.begin();itei!=m_EnimyList.end();itei++) //遍历齐全敌机{HRGNhrgn=::CreateRectRgn(m_player->pos.x,m_player->pos.y,m_player->pos.x+41,m_player->pos.y+41); //患上到飞机Region,图宽41高41 SetRect(&m_rect,itej->getPosition().x,itej->getPosition().y,itej->getPosition().x+50,itej->getPosition().y+50) //患上到敌机rect,敌机宽50高50 if(RectInRegion(hrgn,&m_rect)) //两机相撞 { ……………………. //碰撞之后的种种处置 }}让碰撞愈加准确:使用WindowsAPI函数PtInRegion()以及CreatePolygonRgn(),选取配角飞机的三个关键点的坐标放在POINT数组中,并将其作为参数代入CreatePolygonRgn()中天生HRGN,在枪弹与配角飞机做碰撞检测时惟独分辨枪弹的中间点能否在这个Region中就可(PtInRegion())。
留意:CreateRectRgn()与CreatePolygonRgn()等建树Region的函数会占用体系资源,由于游戏的主渲染函数Render()是络续实施的,如许会组成资源糜掷,于是在用完之后未必要释放:DeleteObject(region)要点六:敌机直线翱翔末了想这个下场的时候,感应很好实现,脑子里马上想到以及了。
其实如许实现有下场,当尽头以及尽头的连线斜率不是1或者-1时就会涌现意想不到的责任了,飞机并无直接飞向尽头,而因此斜率相对于值为1的路途飞已经往,再水平或者垂直飞向尽头。
处置这个下场有多少个方式,其中有一个方式是行使盘算机图形学上的Bresenhem直线算法。
该算法用于盘算机画平面上的直线,算法如下:|m|abs(deltaY))//轨迹斜率0)//1 { if(m_bFirstCalculate) { m_Delta=2*abs(deltaX)-abs(deltaY);//d0=2×dx-dy m_bFirstCalculate=false; } //依据轨迹斜率分辨能否要挪动X坐标 if(m_Delta>0)//m_iTempo)break;}//endofwhile(*pStr)
2023/5/1 0:27:02 2.18MB DDraw
1
/* CX20106A超声波发送与接受法度圭表标准 40KHz脉冲由单AT89S52单片机P1.0口送出,由P3.2(INT0)付与中断方式付与。
按时器0,按时器1中断方式责任,T1为8位自动重装方式(按时12.5us),T0为16位按时器(按时约65ms) 超声波接受付与内部中断INT0,接受到返回脉冲后,在内部中断法度圭表标准中计算距离。
65ms超声波传布距离约65×10^(-3)× 340m/s=22.1m,距离足够了,远超CX20106A的丈量规模。
40KHz对于应波周期T=1/40KHz=25us,方波高占空比50%,上下电平宽度分别占0.5T=12.5us。
按时器T1付与8位自动重装方式(按时12.5us),在单片机付与12MHz晶振的前提下,(2^8-X)×12/12us=12.5us (1)当X=0xF3时,2^8-X=13,(2)当X=0xF4时,2^8-X=12, 所以,取X=0xF3,0xF4均能够满足计时申请。
距离表普通4位数码管上,单元为cm。
*//*单片机P2口接74HC138(三八译码器)P2.3--74HC138:/EI、P2.2--74HC138:A二、P2.1--74HC138:A一、P2.0--74HC138:A0译码器输入Y0,Y一、Y二、Y三、Y四、Y五、Y六、Y7均低电平实用,分别选通1~8个数码管。
搜罗2个四位一体数码管LG3641BH,共2x4=8个数码管。
数码管数据口为P0口。
数码管为共阳4位一体数码管。
成果:译码器输入为1——8个数码管的段选信号,轮流遴选1——8数码管。
dispaly(uintd)将d(distance)的千、百、十、个按次表普通1~3号数码管上。
展现原理: 一、送出要展现的段数 二、P2译码,选摘要展现的位 三、延时1——2ms,功夫不能过长,不然会闪灼,也不能过短,不然会很暗。
四、作废段选,消隐! 若要展现多段,重复以上4步!*/
2023/4/28 6:54:01 1.73MB CX20106A 超声波 测距 keil
1
本文阐发了台湾某银行客户的守约收入情景,提出了基于数据开掘本领的料想客户守约大概性。
从迫害管理的角度来看,料想的守约概率的准确性能够用来对于可信的或者不可信的客户举行分类。
本文起首对于数据集举行了末了处置,将数据拆分为2000个熬炼集与1000个测试集。
每一个客户信息中有23个自变量,依据其各个因素的相关性举行了调解而后使用了5开掘方式,搜罗KNN,分类树,随机森林,Logistic回归,神经收集举行建模,比力这5种方式中守约概率的料想准确性。
其中神经收集的料想下场最佳,料想准确率抵达了83.3%;
其次,分类树(81.8%)以及随机森林(80.1%),而后是Logistic回归(78.3%)。
KNN的料想下场最不梦想(75.8%)。
关键词:诺言卡守约料想、数据分类、Logistic回归、分类树、KNN、神经收集、随机森林。
2023/4/26 23:56:21 1.25MB R语言 分类 神经网络
1
2021张宇题源探析1000题习题分册-数学一.pdf
2023/4/23 23:48:12 86.07MB 张宇2021 1000题
1
快捷搭建垃圾分类模子:使用inception快捷搭建的图像分类模子,目前反对于1000类识别。
从图像中识别出种别后,再经由textcnn模子对于垃圾种别举行映射,最终输入垃圾的种别。
注:垃圾种别因此上海分类尺度。
2023/4/22 18:46:50 13.14MB 垃圾分类 垃圾类别识别 AI 垃圾识别
1
//患上到纵情一个元素的纵情一个属性的之后的值---之后属性的位置值functiongetStyle(element,attr){returnwindow.getComputedStyle?window.getComputedStyle(element,null)[attr]:element.currentStyle[attr]||0;}//动画函数obj---要实施为画的货物json---要实施到的目的的参数货物fn为实施实现后的回调函数(能够再次挪用此方式依据上面格式传参--秩序实施多个动画)//挪用例://zIndex:1000//透明度opacity:数字尺度----小数---放大100倍//my$("btn1").onclick=function(){//varjson1={"width":400,"height":500,"left":500,"top":80,"opacity":0.2};//animate(my$("dv"),json1,function(){//varjson2={"width":40,"height":50,"left":0,"top":0,"opacity":1,"zIndex":1000}//animate(my$("dv"),json2,function(){依据此格式频频重复削减动画将会秩序实施});//});//};functionanimate(element,json,fn){clearInterval(element.timeId);//收拾按时器//按时器,返回的是按时器的idelement.timeId=setInterval(function(){varflag=true;//默许,假如,部份抵达目的//遍历json货物中的每一个属性另有属性对于应的目的值for(varattrinjson){//分辨这个属性attr中能否opacityif(attr=="opacity"){//患上到元素的之后的透明度,之后的透明度放大100倍varcurrent=getStyle(element,attr)*100;//目的的透明度放大100倍vartarget=json[attr]*100;varstep=(target-current)/10;step=step>0?Math.ceil(step):Math.floor(step);current+=step;//挪动后的值element.style[attr]=current/100;}elseif(attr=="zIndex"){//分辨这个属性attr中能否zIndex//层级窜改便是直接窜改这个属性的值element.style[attr]=json[attr];}else{//普通的属性//患上到元素这个属性的之后的值varcurrent=parseInt(getStyle(element,attr));//之后的属性对于应的目的值vartarget=json[attr];//挪动的步数varstep=(target-current)/10;step=step>0?Math.ceil(step):Math.floor(step);current+=step;//挪动后的值element.style[attr]=current+"px";}//能否抵达目的if(current!=target){flag=false;}}i
2023/4/22 10:14:06 3KB web animate
1
GoogleVisionAPI轻松一点!经由将成果渺小的机械学习模子封装在易于使用的RESTAPI中,CloudVisionAPI使开拓人员能够知道图像的内容。
它能够将图像快捷分类为数千个种别(譬如“风船”),检测图像中的单个货物以及面部,并读取图像中搜罗的打印文字。
2分钟就可末了!患上到API密钥浏览此处::建树一个Google帐户。
您大概会很荣幸,并患上到$300的无偿使用额。
经由免费试用版激活VisionAPI。
浏览此处::转到依据选项卡并建树一个新的依据(请拜望上面的屏幕截图)。
建树凭证>API密钥。
运行这些召唤以装置libgitclonegit@github.com:philipperemy/vision-api.git&&cdvision-apivirtualenv-ppython3venvsourcevenv/bin/activatepipinstall-rrequirements.txt推理让咱们对于猫的图片举行一个判断:召唤exportGOOGLE_API_KEY=<AP
2023/4/22 6:29:12 279KB api google vision GooglePython
1
某国内展览中间共40层限度前提(1)电梯的运行法则是:可抵达每一层。
(2)每一部电梯的最大乘员量均为K人(K值能够依据仿真情景在10~18人之间未必)。
(3)仿真末了时,各电梯随机地处于其适宜运行法则的纵情一层,为空梯。
(4)仿真末了后,有N人(0<N<1000)在M分钟(0<M<10)内随机地抵达该国内展览中间的1层,末了乘梯行为。
(5)每一位旅客初次所要抵达的楼层是随机的,令其在适宜的电梯处期待电梯到来。
(6)每一位旅客乘坐适宜的电梯抵达指定楼层后,随机地阻滞10-120秒后,再随机地去往
2023/4/21 12:33:34 48KB 电梯仿真
1
界面卓越,约莫游戏...代码量少#include#include#includeGuessnum::Guessnum(QWidget*parent):QWidget(parent),ui(newUi::Guessnum){ui->setupUi(this);this->t=15;this->total=0;this->randNum=0;this->showNum=0;this->flag=0;this->time_flag=0;this->show_messg="";this->timer=newQTimer(this);this->timer->start(1000);
2023/4/19 14:44:38 1.61MB Qt 猜数字 界面
1
电机矢量抑制等算法在Simplorer中的实现仿真本领的片面使用残缺窜改了传统的方案流程,实现"仿真驱动产物研发"。
以互联网为代表的信息本领快捷阻滞,增长着信息化以及产业化的深度领悟,本领阻滞普及神速,市场相助日益凶猛,企业必需以最快的速率,推出更高品质更好客户体验的产物能力够生涯以及阻滞。
为此,仿真货物不光要使用于产物方案阶段,还必需要贯串产物从不雅点方案末了,到方案参数优化、制作、运行以及掩护的全人命周期,从而确保产物方案顺应繁杂卑劣的操作情景,普及产品质量,飞腾产物全人命周期资源。
作为工程仿真的诱惑者,ANSYS自动于开拓先进的仿真本领,建树仿真平台以及仿真生态体系,飞腾仿真货物的使用难度,增长仿真货物的普及、片面以及深入使用,将仿真贯串产物全人命周期中的齐全阶段,经由数字探究、数字原型以及数字孪生体实现"仿真驱落成程"。
最新的18版本是在ANSYS40多年本领积贮的底子上,一千多名业余研发人员勤快自动的下场,在电磁、流体、结构、平台、半导体、嵌入式软件等全线产物上都患上到了弥留本领突破以及阻滞,软件成果更强、集成度更高、使用更便捷、盘算规模更大,仿真速率更快,是实现"仿真驱落成程"
2023/4/16 16:57:34 10.41MB simplorer svpwm
1
共 523 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡