一键在自己的网站上添加一只会动的小宠物

原创JYeontu前端也能这么有趣2024-01-0300:00发表于广东

组件实现效果如下图:

图片包我们可以通过以下几种方式来获取:

会作图的同学可以自己画一套专属的图片包。

我们从动图或视频中截取关键帧,并将获取到的关键帧背景扣除,这样我们也可以得到一套自己喜欢的图片包。

其实网上也有很多的桌宠图片包资源,所以我们可以直接到网上搜索。

由于本人美术不行且想偷懒,所以果断地选择了第3种方式来获取到了可以使用的图片资源。

获取到一套图片包之后,一套图片包中可能包含多个动作行为,所以我们还需要对其进行分类,将不同行为的图片分类出来,为了方便我们后续代码的编写,我们可以先将图片根据动作的顺序进行编号命名。

如上图划分的4中行为动作,我们都按顺序对图片进行编号命名,那么我们后续引用的时候就可以根据序号来定义一个行为动作,如下图:

图片准备好并且处理好之后,我们便可以开始编写代码了。

我们需要完成一个配置表来将图片和行为关联起来,如下图:

我们需要对每个图包的每个动作进行一个简单的配置:

图片包的路径。

没有进行任何行为的时候的默认展示图片。

行为集合,每个集合的配置如下:

name:该行为的名称,后面会在行为菜单展示;

min:行为开始图片编号;

max:行为结束图片编号;

isMove:该行为是否要发生位移;

audio:触发该行为时的音频。

具体如下:

{"name":"run","min":1,"max":2,"isMove":true,"audio":"Pikachu.mp3"},2、组件参数配置name选择展示的图片包,目前已有图片包:皮卡丘,奇犽,白一护,橘一护,喵老师,蓝染,迪达拉,日向雏田。

触发可移动行为时每一次移动的距离,默认为20px。

桌宠的尺寸大小,默认为50px。

初始化时默认触发的行为,可从行为菜单中选择。

props:{name:{type:String,default:"皮卡丘",},step:{type:Number,default:20,},petSize:{type:String,default:"50px",},defaultAction:{type:String,default:"",},},3、配置数据初始化我们需要根据传入的name来选择相对应的配置,图片我们要通过require的方式来引入,不能直接使用相对路径字符串。

importconfigfrom"./config.json";initData(){this.webPetConfig=config[this.name];this.actionList=this.webPetConfig.actionList;this.imgRootPath=this.webPetConfig.imgRootPath;this.imgSrc=require("@/assets/img/"+this.webPetConfig.defaultImg);this.uid="j-web-pet-"+getUId();constlist=this.actionList.map((item)=>{returnitem.name;})||[];this.menuList=list;clearTimeout(this.isRunToTarget);this.isRunToTarget=null;this.menuShow=false;}4、页面初始化根据传入参数及对应的配置来进行页面初始化。

init(){this.nowAction=this.actionList.find((item)=>{returnitem.name==this.defaultAction;})||{};this.showImg=document.getElementById("showImg");this.showImg.style.width=this.petSize;this.showImg.style.height=this.petSize;this.showImg.style.right=this.petSize;this.showImg.style.top="50%";this.showImg.style.transform="";this.mouseEventListen();this.autoRunToTarget();},5、行为菜单栏我们需要有个行为菜单栏来对宠物的行为进行切换,所以我们可以制作一个简易菜单展示,为了防止菜单栏溢出视图窗口,我们可以对其弹出位置进行以下限定:

菜单顶部与宠物的顶部对齐,如下图:

菜单底部与宠物中心对齐,如下图:

菜单从宠物右边弹出,如下图:

菜单从宠物左边弹出,如下图:

实现代码如下:

showMenu(){constw=this.showImg.offsetWidth;consth=this.showImg.offsetHeight;constleft=this.showImg.offsetLeft;consttop=this.showImg.offsetTop;constinnerWidth=window.innerWidth;constinnerHeight=window.innerHeight;constinLeft=left

playImg(action,ind){if(!action||JSON.stringify(action)=="{}")return;letmin=action.min,max=action.max;if(!ind||indmax){ind=min;}this.showImg&&this.showImg.setAttribute("src",require("@/assets/img/"+this.imgRootPath+ind+".png"));clearTimeout(this.isRunToTarget);this.isRunToTarget=setTimeout(()=>{this.playImg(action,ind+1);},500);},7、宠物移动效果实现移动效果我们只需要在图片切换的同时对图片的定位进行修改,便可以简单实现宠物移动的效果,所以我们需要计算每次移动的时候图片的坐标变化量及角度的偏移量。

转化成这么一道数学题之后是不是觉得简单多了?我们只需要解开这道简单的三角函数题目即可:

我们可以通过点A和点B的坐标来求边BC和边AC的长度:

AC=|X2-X1|BC=|Y2-Y1|知道了这两边的长度之后我们便可以求得角θ的度数了。

首先我们应该先了解一下反正切arctan,如果tanθ=y,我们可以得出arctan(y)=θ,所以我们可以通过反正切来求得角θ的大小

但是我们计算的时候两边的长度永远是正的,所以求得的角度区间应该是[0,π/2],所以在下面这种情况(目标点x坐标大于宠物x坐标)的时候,我们应该对其进行一个y轴镜像翻转。

转化成代码如下:

autoRunToTarget(action=this.nowAction,x="",y=""){if(action.isMove){if(!x)x=getRandomNum(0,window.innerWidth);if(!y)y=getRandomNum(0,window.innerHeight);this.runToTarget(action,action.min,x,y,()=>{this.autoRunToTarget(action);});}else{this.playImg(action);}},9、宠物拖动有的时候宠物可能会遮挡到页面内容,我们需要将其拖动移开,这里我们可以对鼠标移动事件和点击事件进行监听处理。

我们需要先点击宠物后使其进入可拖动状态才能开始拖动宠物。

clickPet(e){this.canDrag=true;//设置可拖动状态clearTimeout(this.isRunToTarget);this.startClickX=e.pageX-window.scrollX;this.startClickY=e.pageY-window.scrollY;window.addEventListener("mouseover",this.mouseoverHandler,false);window.addEventListener("mouseup",this.mouseupHandler,false);},2、根据鼠标坐标更新宠物坐标判断当前是否进入可拖动状态,可拖动时根据鼠标坐标更新宠物坐标。

mouseoverHandler(e){if(!this.canDrag)return;constw=this.showImg.offsetWidth/2;consth=this.showImg.offsetHeight/2;this.showImg.style.left=e.pageX-window.scrollX-w+"px";this.showImg.style.top=e.pageY-window.scrollY-h+"px";this.showImg.style.right="";this.showImg.style.bottom="";},3、区分点击事件和拖动事件鼠标抬起时判断是点击事件还是拖动事件,这里我使用拖拽开始位置和拖拽结束位置来做一个简单的判断,拖拽结束后注意清除鼠标的监听事件。

mouseupHandler(e){constendClickX=e.pageX-window.scrollX;constendClickY=e.pageY-window.scrollY;const{target}=e;if(target==this.showImg&&(Math.abs(this.startClickX-endClickX)<10||Math.abs(this.startClickY-endClickY)<10)){this.showMenu();}else{this.menuShow=false;this.autoRunToTarget();}this.canDrag=false;window.removeEventListener("mouseover",this.mouseoverHandler,false);window.removeEventListener("mouseup",this.mouseupHandler,false);},10、播放音频根据配置表获取当前行为的音频,有配对的音频则随机播放音频。

如有侵权,可以联系删除。

目前实现的只是一个简单组件版,后面会继续完善,增加更多的交互功能或交互小游戏,提高组件可配置性,后续还有两个改动方向:

有图片包资源的同学可以赞助下有什么其他好的建议也都可以提出来

当前组件已发布到npm,可以查看组件文档进行引入并配置。

引入后即可直接使用。

Gitee源码:/zheng_yongt…[3]

这里是JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球,平时也喜欢写些东西,既为自己记录,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解,写错的地方望指出,定会认真改进,在此谢谢大家的支持,我们下文再见。

THE END
1.宠物AI绘画与定制:一键生成个性化宠物画像,满足多种风格需求宠物,作为人类最忠诚的伙伴,早已融入了咱们的日常生活,成为家庭中不可或缺的一员。传统的宠物画像往往需要花费大量时间和精力,且难以满足个性化需求。如今,随着人工智能技术的不断发展宠物绘画与定制服务应运而生,为广大宠物爱好者带来了一键生成个性化宠物画像的便捷。本文将带您理解这一创新技术,满足您对多种风格的需...http://www.slrbs.com/jrzg/aitong/129627.html
2.二次元AI绘画app免费下载【宠物秒变二次元】 愿不愿意带上宠物一起突破次元壁,看一下异世界的宠物长什么样子?你的宝贝不但可以突破次元壁变为异次元萌宝,还能够化身成年人与你合影照片,赶紧来看一下吧! 【自拍照秒变二次元】 不论是3D风、Artbook风、水墨风、性感迷人猫耳风、赛博朋克风或是温柔风、恶魔风,只需提交一张自己的照片...https://www.duote.com/android/1082005.html
3.绘画app下载绘画app合集下载sketches中文版中文更新时间:2022-01-13sketchesapp是款优质的指尖画图软件,为用户汇聚大量优秀画师作品,还有各种绘画小工具。让你不仅能够自由临摹,自由上色,还能够发挥你的想象力,记录瞬间灵感,让你随时随地都能绘画、涂色解压等!sketches官方版介绍画画从未如此简单,用你的画笔让图片充满生机 ...http://www.downyi.com/p/h1_K27635_P6.html
4.手机ai绘图软件有什么APP推荐手机ai绘图软件有什么下载让智绘AI成为您手机中出色的画图工具。智绘AI是一款可以让用户便捷去用梦境绘画的绘画软件,使用起来非常简单,可以让用户通过简单的描述,便可以让用户轻松将自己的梦境生成一副绘画作品,是一款不错的手机绘画神器。- AI绘画简单描述您的想法,输入任何文字,选择您想要的风格类型,点击绘画,等待十几秒钟,就能看到自己...https://www.wandoujia.com/bangdan/394729/
5.萌新入门手册3、宠物系统 喂食宠物可以好的御魂、金币等加成 萌新推荐先培养秋田犬,升满级后,助战可以获得蓝票、勾玉 吸引宠物的猫粮/狗粮可以通过悬赏封印获取 ...第三个按钮,点击可以一键穿戴预设好的御魂(进入副本前必须的动作) 注:如果没有预设,式神会保持当前已经佩戴好的御魂 3、御魂预设的使用 ...https://ds.163.com/article/61f5dc0dc5a32500011f2723/
6.北京宠物美容学校派多格第53期画图考试课派多格学校目前已经开班几十期,为宠物行业培养了数以百计的宠物美容师,并获得了消费者和使用单位的广泛赞誉。为了考核大家之前所学的知识,让大家对自己所学更加深刻,本节课我们将进行一次小考试——画图考试课。 北京宠物美容学校派多格第53期画图考试课 http://www.dogmr.com/gongsidongtai/gongsidongtai-17215.html
1.AI绘画定制喂饭级教程!用最新的技术定制一副情侣+宠物合照吧本帖最后由 花昭 于 2024-11-13 16:42 编辑 大家好!本花本昭又来了~最近听闻红楼大佬重新补档了...https://bbs.qianyechuangxin.com/forum.php?mod=viewthread&tid=2661&mobile=2
2.揭秘宠物定制向量图的制作过程(宠物定制向量图怎么做出来的...在数字化时代,宠物定制向量图成为了许多宠物爱好者的心头好。那么,这些精美的宠物定制向量图究竟是如何制作出来的呢?让我们一起揭秘这个过程。 首先,制作宠物定制向量图的第一步是素材收集。这包括宠物的高清照片,以及宠物主人希望加入的任何元素,比如名字、装饰品等。这些素材的质量直接影响到最终向量图的效果。 https://www.zaixianjisuan.com/jisuanzixun/jiemichongwudingzhixiangliangtudezhizuoguocheng.html
3.ai宠物赛道,7天涨粉2w+,最新教程玩法实操项目然后选好比例,一键生成图片。 想要其他类型的图片?简单!把狼换成狮子、老虎,人物换换衣服、装饰,又是一个新图片啦! 图片生视频篇 现在市面上能把图片转成视频的工具可不少,即梦、可灵、海螺都有这个功能,虽然免费额度下的速度慢的像蜗牛,但胜在能白嫖嘛。嫌慢?那就开会员呗。 https://www.5188xm.com/scxm/9712.html
4.图片生成软件大盘点!这是一个AI绘画网站,提供多样化的、可控的图像生成算法,满足插画、概念、素材、创意的快速表达。 四、稿定AI 稿定AI是一个一站式AI创作工具箱,拥有免费AI绘画、AI设计、AI文案等爆款AI工具,让你快速表达创意。 想学习更多数字艺术课程吗?快来火星时代教育,提供游戏设计培训、动画培训、UI设计培训等课程,点击咨询,一...https://www.iotsj.com/kuaixun/7956.html
5.从AI宠物创作到财富涌流:零门槛高收益之路项目概述**:**今天仍然带来ai系列项目,其实很多AI生成视频的项目逻辑都是相通的,这个项目就是通过AI 绘画工具创作独特的宠物图片,比如宠物的奇幻变身、穿着时尚服装的宠物形象等。 将这些图片发布在社交媒体或图片分享平台上,吸引粉丝关注。当粉丝量达到一定规模后,可以与品牌合作进行广告推广,或者将图片授权给相关企业...https://blog.csdn.net/2401_85154887/article/details/143977688
6.AppStore上的“PetTranslatorAI:Cat&Dog”有了宠物 AI,您可以为您的宠物制作与现实生活中一模一样的头像。 您将收到以您心爱宠物的肖像为原型制作的真实艺术品! 有了这款应用程序,您就能从与宠物的有趣交流中获得难忘的情感! 无论是喵喵叫还是汪汪叫。 自己试试吧! 还等什么? 今天就下载 Pet AI Cats & Dogs,与您的宠物开始前所未有的情感交流! https://apps.apple.com/cn/app/pet-translator-ai-cat-dog/id6475014792
7.QQ宠物保姆V3.0绿色版qq宠物管家的功能优点:1、自动喂食、自动逗宠、自动打工、自动治病,免费成为你的宠物管家替你照顾好你的宠物,实现电脑自动化养宠。2、支持检查库存,没有物品的时候进行购物然后再喂养。3、支持自动购物,以保证没库存时宠物不被暂停成长。4、支持批量购买,减少连接服务器的次数,大大的降低了宠物由于网络问题也被暂停...https://m.qqtn.com/q/25858
8.画板画图软件下载手机版2024最新免费安装画板画图软件下载安装失败或使用异常,请 -> 一键举报猜你喜欢 画画 画画软件排行榜 画画软件是一款能在电脑上作画的软件,除了电脑之外手机也是可以使用绘图软件的,画画软件不仅可以随时涂改而且还可以提高画图效率。画画软件有哪些,手机画画软件哪个好?小编悉心整理了手机画画软件排行榜、画画软件手机版。小编为大家推荐最...https://m.liqucn.com/app-rn-9419966274184-0
9.跨境电商与ChatGPT的碰撞:应用嘲与合规风险跨境电商出海企业可以通过向ChatGPT输入要求和关键词,快速生成产品标题和产品的具体描述,例如“我在美国亚马逊上卖水杯,请用英文写一段关于黑色水杯的详情页商品介绍文案”,或者可以通过ChatGPT草拟邮件、邀请函,例如“我是跨境电商宠物产品卖家,销往美国、澳大利亚等国,请用英文写一封第133届广交会的邀请函”。ChatGPT强...https://www.tmtpost.com/baidu/6529769.html