菜鸟求助大神这是什么歌6,敌人不同状态时动画问题,请大神指点

菜鸟求助,敌人不同状态时动画问题,请大神指点_百度知道
菜鸟求助,敌人不同状态时动画问题,请大神指点
我有更好的答案
m_player = GameObject.FindGameObjectWithTag(&Player&).GetComponent&Player&();
这放到void Start()
你的敌人C# script多个function
void RotateTo()
Vector3 oldangle = m_transform.eulerA
m_transform.LookAt (m_player.m_transform);
float target = m_transform.eulerAngles.y;
float speed = m_rotSpeed * Time.deltaT
float angle = Mathf.MoveTowardsAngle (oldangle.y, target, speed);
m_transform.eulerAngles = new Vector3 (0, angle, 0);
这是敌人跑到你游戏开始位置后 在跑到你的位置
有没有Base Layer.attack
if(stateInfo.nameHash==Animator.StringToHash(&Base Layer.attack&)&&!m_ani.IsInTransition(0))
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁只需一步,快速开始
后使用快捷导航没有帐号?
查看: 677|回复: 15
新手求助刷怪问题,求大神指点
主题帖子积分
在线时间19 小时
主题帖子积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
前方高能预警!非战斗人员请尽快登录!
才可以下载或查看,没有帐号?
本帖最后由 GGGoldeN 于
18:48 编辑
自己照着论坛资料试着制作了一下防守的刷怪,刷怪是成功了,但是我想在这个基础上设置怪物一个一个出来,有点时间间隔,不要一次性一坨蹦出来,求指点,在这个基础上怎么设置
[Golang] 纯文本查看 复制代码function CRPGTESTGameMode:Start()
-- 每一段时间刷一波兵(计时器)
GameRules:GetGameModeEntity():SetContextThink(DoUniqueString(&Shua_Guai&),
function()
print(&Run ShuaGuai&)
ShuaGuai_bo = ShuaGuai_bo + 1
-- 设置刷怪数量(不同的波数不同数量,如:BOSS)
if ShuaGuai_bo == 7 or ShuaGuai_bo == 6 or ShuaGuai_bo == 8 then
ShuaGuai_count=1
ShuaGuai_count=5
for k=1,#ShuaGuai_entity do
-- 设置刷怪数量
GameRules.ShuaGuai_num = GameRules.ShuaGuai_num + ShuaGuai_count
for i=1,ShuaGuai_count do
-- 创建单位
CreateUnitByName(单位名字, 诞生点, 是否在空地, 所有者, 所有者, 队伍编号[敌我的关键])
local unit = CreateUnitByName(ShuaGuai_unit[ShuaGuai_bo], ShuaGuai_entity[k]:GetAbsOrigin(), false, nil, nil, DOTA_TEAM_BADGUYS)
-- 禁止单位寻找最短路径
unit:SetMustReachEachGoalEntity(true)
-- 让单位沿着设置好的路线开始行动
unit:SetInitialGoalEntity(ShuaGuai_entity[k])
-- 添加相位移动的modifier,持续时间0.2秒
-- 当相位移动的modifier消失,系统会自动计算碰撞,这样就避免了卡位
unit:AddNewModifier(nil, nil, &modifier_phased&, {duration=0.2})
-- 如果游戏正在进行中,则继续每一段时间刷一波
-- if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
-- 如果刷出的是最后一波怪,则刷怪循环结束,如果不是,则继续每一段时间刷一波
if ShuaGuai_unit[ShuaGuai_bo] == &我不是BOSS& then
return nil
-- 延时出怪
主题帖子积分
在线时间19 小时
主题帖子积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
另外胜利条件和失败条件设置的格式是怎样的,弄了半天没弄出来。。。
主题帖子积分
在线时间19 小时
主题帖子积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
没人来,自己解决了
主题帖子积分
在线时间42 小时
主题帖子积分
Lv:2 长袍法师, 积分 275, 距离下一级还需 25 积分
Lv:2 长袍法师, 积分 275, 距离下一级还需 25 积分
最后是怎么解决的呢?
主题帖子积分
在线时间19 小时
主题帖子积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
我是新手,只能使用笨办法了
这是胜利失败条件,感谢空力使在github发的代码作为参考
[AppleScript] 纯文本查看 复制代码
function CRPGTESTGameMode:OnEntityKilled( keys )
--游戏胜利失败条件
print(&OnEntityKilled&)
DeepPrintTable(keys)
--获取被杀单位
local unit = EntIndexToHScript(keys.entindex_killed)
--循环判断是否是刷出的怪
for i,name in pairs(ShuaGuai_unit) do
if unit:GetUnitName() == name then
return nil
--如果是就-1
-- yisha = yisha + 1
for _,name in pairs(JiDi_unit) do
if unit:GetUnitName() == &npc_baoxiang& then
GameRules:SendCustomMessage(&&font color=\&#22df22\&&藏宝箱已被摧毁!!&/font&&, 1, 1)
GameRules:SendCustomMessage(&游戏将在10秒后结束&, 1, 1)
GameRules:SetGameWinner(GameWinner)
if unit:GetUnitName() == &我不是BOSS& then
GameRules:SendCustomMessage(&&font color=\&#22df22\&&最终BOSS已经被杀死!!&/font&&, 1, 1)
if GameWinner == CreepTeam then
--如果胜利队伍是敌对队伍
GameWinner = PlayerTeam
return nil
GameRules:SendCustomMessage(&游戏将在10秒后结束&, 1, 1)
GameRules:SetGameWinner(GameWinner)
主题帖子积分
在线时间19 小时
主题帖子积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
这是刷怪的设定,只能用最笨的办法,在计时器里再套了一个计时器
[Python] 纯文本查看 复制代码function CRPGTESTGameMode:Start()
-- 每一段时间刷一波兵(计时器)
GameRules:GetGameModeEntity():SetContextThink(DoUniqueString(&Shua_Guai&),
function()
print(&Run ShuaGuai&)
ShuaGuai_bo = ShuaGuai_bo + 1
-- 设置刷怪数量(不同的波数不同数量,如:BOSS)
if ShuaGuai_bo == 7 or ShuaGuai_bo == 6 or ShuaGuai_bo == 8 then
ShuaGuai_count=1
ShuaGuai_count=5
for k=1,#ShuaGuai_entity do
-- 设置刷怪数量
GameRules:GetGameModeEntity():SetContextThink(DoUniqueString(&jixu&),
function()
GameRules.ShuaGuai_num = 1
ShuaGuai_count = ShuaGuai_count - 1
for i=1,GameRules.ShuaGuai_num
-- 创建单位
CreateUnitByName(单位名字, 诞生点, 是否在空地, 所有者, 所有者, 队伍编号[敌我的关键])
local unit = CreateUnitByName(ShuaGuai_unit[ShuaGuai_bo], ShuaGuai_entity[k]:GetAbsOrigin(), false, nil, nil, DOTA_TEAM_BADGUYS)
-- 禁止单位寻找最短路径
unit:SetMustReachEachGoalEntity(true)
-- 让单位沿着设置好的路线开始行动
unit:SetInitialGoalEntity(ShuaGuai_entity[k])
-- 添加相位移动的modifier,持续时间0.2秒
-- 当相位移动的modifier消失,系统会自动计算碰撞,这样就避免了卡位
unit:AddNewModifier(nil, nil, &modifier_phased&, {duration=0.2})
if ShuaGuai_count == 0 then
return nil
return 1.5
-- 如果游戏正在进行中,则继续每一段时间刷一波
-- if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
-- 如果刷出的是最后一波怪,则刷怪循环结束,如果不是,则继续每一段时间刷一波
if ShuaGuai_unit[ShuaGuai_bo] == &我不是BOSS& then
return nil
-- 延时出怪
主题帖子积分
在线时间19 小时
主题帖子积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
里面的计时器return nil不知道会不会有问题
主题帖子积分
在线时间123 小时
主题帖子积分
里面的计时器return nil不知道会不会有问题
绝对没问题!
停止计时器的时候就是要return nil,相当于不书写return语句。
主题帖子积分
在线时间123 小时
主题帖子积分
本帖最后由 blockbaster 于
19:41 编辑
由于时间关系我没有认真看你的代码!2个计时器多余了。
我给一个封装的函数,参数duration刷怪间隔,unitname怪物种类,pos怪物出生地点,count刷怪数量,spawFirst调用时是否生成第一个怪物,startLoc自动寻径的开始点。
function SpawnCreepA()
& && &local&&creep = CreateUnitByName(g_unitname,g_pos,true,nil,nil,DOTA_TEAM_NEUTRALS)
& && &--//设置进攻路线
& && &creep:SetMustReachEachGoalEntity(true)& && && && && && && && && && && && && && && & --//强制按既定路径行走
& && &creep:SetInitialGoalEntity(g_startLoc)& && && && && && && && && && && && && && && && && &--//设置自动路径的开始点
& && &creep:AddNewModifier(nil, nil, &modifier_phased&, {duration=10})& && && & --//避免卡位
& && &g_count = g_count -1& && && && && && && && && && && && && && && && && && && && && && && && & --//每次刷一个g_count标记-1
& && &--//何时停止刷怪
& &&&if g_count == 0 then
& && && &&&g_startLoc = nil
& && && &&&g_count = nil
& && && &&&g_duration = nil& && && &
& && && &&&g_pos = nil
& && && &&&g_unitname = nil& && & --//排泄
& && && &&&return nil
& && && &&&return g_duration
SpawnCreep(unitname, pos, duration,count,spawnFirst,startLoc)
& && &&&g_startLoc = startLoc
& && &&&g_count = count
& && &&&g_duration = duration& && && &&&
& && &&&g_pos = pos
& && &&&g_unitname = unitname& && & --//使用全局变量传递到SpawnCreepA
& && &&&--//是否在调用时就刷第一个怪
& && &&&if spawnFirst then
& && && &&&local&&creep = CreateUnitByName(unitname,pos,true,nil,nil,DOTA_TEAM_NEUTRALS)
& && && &&&//自动路线
& && && && &creep:SetMustReachEachGoalEntity(true)& && && && && && && && && && && && && &&&--//强制按既定路径行走
& && && && &creep:SetInitialGoalEntity(startLoc)& && && && && && && && && && && && && && && && && &--//设置自动路径的开始点
& && && && &creep:AddNewModifier(nil, nil, &modifier_phased&, {duration=10})& &&&--//避免卡位
& && && && &g_count = g_count -1
& && && &endif
& && && &//避免只刷一个而且一开始就刷一个的情况下,继续刷第2个
& && && &if g_count ~= 0 then
& && && && && &&&GameRules:GetGameModeEntity():SetContextThink(&SpawnCreep&,SpawnCreepA,duration)
& && && &end
主题帖子积分
在线时间123 小时
主题帖子积分
手打没测试,目测没问题!
举个例子:
我想在坐标(100,200)刷300个npc_dota_neutral_alpha_wolf类型野怪,每1秒刷一个,自动路劲点为编辑器放置的name为spawnLoc的实体,如下调用:
local&&startLoc = Entities:FindByName(nil,&spawnLoc&)
SpawnCreep(&npc_dota_neutral_alpha_wolf&,Vector(100,200),1.0,300,true,startLoc)
主题帖子积分
在线时间19 小时
主题帖子积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
多谢大神!我好好研究研究
主题帖子积分
在线时间123 小时
主题帖子积分
本帖最后由 blockbaster 于
22:32 编辑
我测试了下,大体思路没问题,但是发现以下细节问题!是新手不注意的!
我就不覆盖上面的代码,在贴出修改后的 ,大家也能看看是怎么出错的!
function SpawnCreepA()
& && & local&&creep = CreateUnitByName(g_unitname,g_pos,true,nil,nil,4)
& && & --//设置进攻路线
& && &creep:SetControllableByPlayer(0,true)& && && && && && && && && && && && && && && && &
& && &creep:SetMustReachEachGoalEntity(true)& && && && && && && && && && && && && && && & --//强制按既定路径行走
& && &creep:SetInitialGoalEntity(g_startLoc)& && && && && && && && && && && && && && && && && &--//设置自动路径的开始点
& && &creep:AddNewModifier(nil, nil, &modifier_phased&, {duration=10})& && && & --//添加一个Modifier(也叫buff)避免卡位
& && &g_count = g_count -1& && && && && && && && && && && && && && && && && && && && && && && && & --//每次刷一个g_count标记-1
& && & --//何时停止刷怪
& &&&if g_count == 0 then& && && && && && && && && && && && && && && && && && && && && && && && && & --//g_cout为0说明刷够了!
& && && && &g_startLoc = nil
& && && && &g_count = nil
& && && && &g_duration = nil
& && && && &g_pos = nil
& && && && &g_unitname = nil& && & --//排泄
& && && &&&return nil
& && &else
& && && && &return g_duration
function&&SpawnCreep(unitname, pos, duration,count,spawnFirst,startLoc)
& && && &g_startLoc = startLoc
& && && &g_count = count
& && && &g_duration = duration
& && && &g_pos = pos
& && && &g_unitname = unitname& && & --//使用全局变量传递到SpawnCreepA
& && && &--//是否在调用时就刷第一个怪
& && &&&if spawnFirst then
& && && && &local&&creep = CreateUnitByName(unitname,pos,true,nil,nil,4)
& && && && &--//自动路线
& && && && &creep:SetControllableByPlayer(0,true)
& && && && &creep:SetMustReachEachGoalEntity(true)& && && && && && && && && && && && && &&&--//强制按既定路径行走
& && && && &creep:SetInitialGoalEntity(startLoc)& && && && && && && && && && && && && && && && && &--//设置自动路径的开始点
& && && && &creep:AddNewModifier(nil, nil, &modifier_phased&, {duration=10})& &&&--//避免卡位
& && && && &g_count = g_count -1
& && && & --//避免只刷一个而且一开始就刷一个的情况下,继续刷第2个
& && && &if g_count ~= 0 then
& && && && && && &GameRules:GetGameModeEntity():SetContextThink(&SpawnCreep&,SpawnCreepA,duration)
1、中立生物的队伍是4,玩家ID是0!!!
2、自动寻径的单位一定要设置控制玩家。系统才会正确调用内部的AI脚本。
主题帖子积分
在线时间123 小时
主题帖子积分
本帖最后由 blockbaster 于
23:47 编辑
可以这么说:
如果新手,虽然我也是新手,能把我上面这段我也是曾经这么走过来的重要的RPG刷兵代码搞懂搞透,我想你离成为大神不远了!
因为它涉及了LUA和DOTA2 很多关键性的东西,是浓缩的精华,当然还不全面!
我们在开发魔兽地图的时候流行一句话:刷兵、冲锋和群锤!基本上掌握着3点就没什么大问题!
这3类代码浓缩了所有的知识和技能!里面还隐含着处处都离不开它的 ——触发器!!!
以为现在对DOTA2的理解,你需要这样一句话:刷兵、自定义单位英雄物品、自定义技能(LUA驱动和数据驱动)和自定义UI界面(这部分是比魔兽高级的)
里面也隐含了DOTA2重要的触发器,DOTA2触发器有2中形式:实体触发器和监听事件
魔兽有自带的单位、物品、技能编辑器,很傻瓜式。技能方面可以使用JASS开发更高级的技能,DOTA就是这方面的最高典范!。 类似DOTA2的LUA驱动类技能。
DOTA2 编辑器刚开发这些都只能以KV表的形式自定义,对刚入门的新手来说是一个坎!估计不久针对这些就会出来傻瓜式的编辑器,减少入门难度和工作量。
大家可以看我的论坛注册时间,我研究LUA和DOTA2只有几天时间,就能写出上面代码,我不是自吹。
当然我是有很多程序设计语言vb\C\C++\php\js\vbs\html\css\java\sql\jass,包括汇编基础的,虽然有些因为不常用都生疏了,还是一个资深的魔兽争霸地图编辑器和JASS高手!
但这些都是我自学的,我除了英语好,之前压根没学过程序设计,我不是计算机专业的,都是拼着兴趣和毅力去学的。
我还在空闲的时候学习了初级日语!& &
当然我最开始学习编程的过程也挺吃力的,有过困难。但是如果摸索出一套方法,就会很高效和顺畅!
为什么我学习任何一门语言这么快?除了一些天分外我觉得还需要按科学规律办事。任何一门编程语言我都认为按下面的步骤去学习就会很快,很扎实。
以上是基础知识,就像说英语,你知道了语法知道怎么构成句子,但是你绝对写不出一片好文章!因为你的单词量不够,经验不够,必然会漏洞百出!
以上是基础,如果能对计算机的工作方式和存储方式有深入了解你将会学的更加简单和透彻!
说白了:世间万物的运行都可以以计算机程序对以0和1表征的数据进行运算的形式表现出来,你需要研究的只是适合某一规律的算法。
接下来你要:
深入学习:
各类语言内部提供的基础函数库和API
高手此基础上扩展的函数库,就是框架之类的
高级的选择一个领域研究:
计算机图形
黑客/网络安全
游戏/软件开发
你学习编程就是要具体用在实际地方!
这是构建大厦的基石,你对各种库了解的越多你的能力就越强水平就越高。新手可以通过学习别人的框架和代码来强化进化自己!
我的学习DOTA2过程:
1、学习编辑器这部分要看文字和视频教程,对大体功能有个了解。编辑器功能挺强大的,但是新手主要能:
& &&&A:用它用笔刷法建立一个地形就可以了。以后再学习建模法。慢慢了解实体工具,触发器。
& &&&B:使用资源管理器查看DOTA2的内部各类型资源,了解他们的保存路径和文件格式,方便以后自定义地图直接引用。
& &&&C:控制台的使用方法和常见命令。这部分不需要掌握一点,对地图的脚本调试很有用。如果没有研究DOTA2 API也可以占时跳过。
& &&&D:至于粒子编辑器、模型编辑器、材质编辑器、电影制作工具留着以后慢慢里了解。你可以直接引用DOTA2里面现有的资源。
2、学习LUA首先要下载一个LUA教程pdf,在安装一个集成环境用于学习测试自己写的代码,边看边写,不写只看我相信你什么都学不会!快速掌握基本的语法,能写出一个通过编译的句子。
& && &哪怕是简单的print(&Hello World&).
3、DOTA2 API的学习,这部分参考资料不是很多。需要自我探索,目前我正在完成这部分工作,为大家铺路!
& && &我是如何研究和测试这么位置功能的API
& &&&A:官方wiki资料+验证
& &&&B :自己猜测+ 验证
& &&&C: 利用DOTA2提供的几个类型自定义图模板。里面的脚本有很多对API的深刻应用,值得学习。同时也是学习自定义单位、英雄、物品、技能、UI完美的资料。
& &&&D:结合编辑器的实体工具
4、事件监听、Think计时器大致了解用法。脚本离不开他们,地位很重要!
5、LUA驱动类技能和Modifier
& &&&这是加强对LUA语言掌握的最佳实践。也是了解DOTA2引擎的途径。
6、自定义单位、英雄、物品、数据驱动类技能& &(你如果不偏向于先脚本,放在2或3的位置)
& && &这些东西是死的,KV表记熟差不多了。关键理解如何利用基类构造新类!这个需要对面对对象语言有认知。
7、UI、电影、模型、贴图 、音效
& && &这部分需要用到大量外部工具:
& & (maya、 3ds max、 zbrush等建模)
& & (photoshop等 贴图)
& & (Flash& &动画UI,这里需要学习C#可能 ,还需要另外学习html/CSS/js制作静态网页的一套技术)
& &&&以上就是 我认为的想成为DOTA2&&优秀开发者需要掌握的全部技能!
& &&&当然成功与否,其实更重要的是靠创意,但是没有技术的支持一切都是空谈!
& & 我下面说说学习程序语言每一部分具体内容:
关键字&&:
关键字就像人类语言的谓语,如跑、跳、吃、喝,直接表明了你想让计算机干什么。而计算机由于是死板的机器一般在20个关键字之内就能基本胜任所有指令!把常用关键字记牢弄清,做到扫一眼就能知道一句是干吗的!
计算机语言的关键字一般都具有下列作用:
1、定义数据类型
2、定义变量和常量,赋值
3、可以充当部分运算符
4、定义函数和调用函数
5、定义数据结构
7、控制语句执行流程
关键字是最基础的最基础的但是很多教程都只是给你一张表,在日后漫长的学习中逐个了解。我认为这是一个不好的地方,这会是是你学习过程只见树木不见深林。因为这些关键字组合起来正好能够描述这门语言的所有东西。不然,必然有新的关键字被造出来!如果能先从整体认识一个事物,在分部慢慢学习会更快,这样是有联系的,不是分开的,符合记忆规律。
我的建议是先背关键字表!
用记号笔标出每一个关键字,出现的第一个使用位置和主要章节,不要求第一次完全理解他的功能和用法。慢慢列理解,当你后面看到一张关键字表浮现出他们的典型用法和代码片段,相信你的语法基础很牢了!
数据类型:
这部分设计计算机对各类数据的存储方式,低级的语言需要你了解 内存结构和存储过程,高级语言 避开了这些,但是对数据存储过程越清楚,你的代码质量就越高。
计算机一般都是以8位的整数倍形式存储.,这是受到CPU和内存物理元器件的制约。
计算机系统对所有存储设备每8位分配一个物理地址,就像门牌号一样,按物理地址找到保存在房间里的0/1数据。高电平或低电平表示0/1。
这些属于电子工程领域了。
程序语言一般都是使用虚拟地址来记录数据位置,通过一张映射表找到物理地址,虚拟地址是常说的指针或句柄。
现在都大部分都是32位系统,为了方便,指针或句柄其实都是32整数形式。64位系统指针就是64为整数。因此功能相同的程序在制程软件时还是要区别开来。
数据类型有么作用呢:
它就告诉计算机我这种类型数据要占用几个房间才能保存完备我。分配给我少了,我就失去价值了;分配给我多了就浪费资源了!这里可以提及一个缓冲区溢出攻击的概念。
就是让数据紊乱构造出非法访问权限。
而且在需要用到我的时候会从对应数量的房间取出来拼接完整。
所以你只需要了解,数据类型不管有着怎么样的名称,什么整数、无符号数、长整数、你不必要太纠结,抓关键,看他占多少位。
只要你占的位数量一样,再注意最高位是不是0、1,计算机通过最高位判断数的正负!就能摸清楚他!
比如int类型占据32位,他的变量名通过一张符号表记录了第一个房间的起始位置,在根据数据类型int往后读取32就取出来了。
对数据类型经常需要转换:
转换的过程实际就是:改变每次要读取的房间的数量。
比如:int(32)转化为 char类型(ASCII字符,8位)那么我只需要去第一个房间后面8位,在计算一下对应那个字符。不需要管后面的。
这是高位转地位情况。
低位类型转高位类型时就很可能出错。因为你往后读取数据的时候可能会读到别人的数据,这无法避免。
所有程序语言必须约定数据类型。
但是有的语言不要求强制表面数据类型,他的编译器会根据上下文自动判断数据类型,编译相关工作交给系统完成。比如Lua 、js 、vbs 、python,这种语言成为动态语言。
就是实时编译时候才确定类型。你在书写程序的时候一般看不出来。
想C/C++ 、VB这种对语法检查严格的,强制要求在定义数据是指明类型。这类语言成为静态语言。
了解了数据类型,常量和变量就很好理解。
数据类型就是规定房间数量用的。
常量和变量就是占据房间的数据。给他们取了个名字而已。需要用的时候直接通过变量名和常量名访问数据。
那有啥区别呢?
实际中,有一些数据我们需要他保持不变。比如一些常数,圆周率PI等。这些东西一旦记录好之后就不需要你在动了,一动肯定出错。pI不是3.14你能算出正确面积?因此对于这种类型数据我们就让编译器去时刻检查这些常量,一旦程序员想要修改这些常量就报错,提醒程序员出错了。但是通过一些非法手段我们能够避开编译器检查,恶意修改常量。这就是漏斗,黑客技术。
那么对于需要时刻变化的临时数据我们叫他变量。可以通过各种运算改变他,以适应需要。比如i = i +1,变量数量上增加1。
数据结构(各种形式:数组、表、链表、图、树,不同语言有差异)
说白了数据结构就是更复杂的变量。
变量常量一般是按线性结构存储的。
但是现实生活中有些东西有着更复杂的关系。比如族谱,英文family-tree,显然这是一种树结构。 还有考试的成绩表,是一种表结构。 还有描述城市之间交通道路图的图结构(拓扑结构)。
链表结构就像链条一样,你可以顺藤摸瓜,找到一个节点,就可以找到上一个或下一个节点。
这些数据在内存中就只能既要保存数据内容,也要保存数据地址,根据与上一个数据内容绑定的下一个数据内容的地址找到下一个的数据内容,而不是线性的地址加减几个房间就行了,因此增加很多开销,需要针对不同的数据结构研究不同的算法。
数据结构和算法就抽象为一门独立的学科。
数据结构就是用来存储计算这种复杂形式的数据。新手了解就行了。
运算符和表达式
运算符是用来连接常量和变量构成表达式的。就是我们数学中的算式,只不过书写格式不同。
我们需要对数据使用不同的运算符做运算得到不同的结果。具体使用什么运算符就要看实际情况,摘了一个苹果又摘了一个苹果你下意识应该选+,要是选别的,我只能说你数学能力太差!
那么函数又是啥?
函数实际就是完成特定功能的语句块。比如一个完成两数相加的简单功能。如果每次遇到需要相加的地方我们都要写c=a+b还好点,但是需要完成更多步骤运算的功能,比如大规模的矩阵运算,我们遇到一处照抄一处是不现实的。虽然最终计算机就是一步一步这么走的,但是编程不就是省事,把工作任务告诉计算机,剩下的我只需要等结果就好!
为了避免重复劳动我们给这种块结构也分配一个地址,记录这个程序块在内存中的位置。在需要的时候通过函数名或函数指针(就是地址)2种形式来调用他的功能。
函数不仅需要记录块的地址,还需要分配一些 传递进来的参数,给这些参数临时的地址,在运算结束后销毁。一般可以保存在内存,也可以保存在寄存器,因为寄存器直接与CPU相连存取数据速度快的难以想象,因此再设计各类语言的编译器时就是评判优劣该语言的重要一点。这也需要更高的技术水平,对计算机的内部构造和工作机理有着深刻认识。
到这里不管对设么语言你如果都能了解这些,我相信你一定能学好!
从某个层面来讲只要你会一种语言你一就会千万种语言!
什么层面?
程序语言无外乎就是关键字、数据类型、常量、变量 、运算符、表达式&&控制结构 、数据结构、函数。一一攻克他们你还不会吗?
程序就是讲一些放置在不同地址的数据,按不同大小,搬来搬去,以二位形式进行加、减、乘、除、 位移计算,最后在输出你想要的的结果,然后可能再次保存为不同格式!
至于为什么要保存为不同格式,一个是商业竞争加密需要,一个是计算机软件算法对数据存储格式的需要!
上面都是我个人的理解!我也不过是一直井底之蛙而已,可能比你跳的高一点。只要你努力你能比我跳的更高,我不断努力跳的更高,看看新的风景!
主题帖子积分
在线时间19 小时
主题帖子积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
可以这么说:
如果新手,虽然我也是新手,能把我上面这段我也是曾经这么走过来的重要的RPG刷兵代码搞懂 ...
在研究别人的地图代码时有些东西老是不理解,对LUA也只是有个模糊的概念理解,看完你这篇文章很多地方便豁然开朗,非常感谢!我一直是做3DMAX等影像制作的,对于编程的入门着实有些困难,之前完全一窍不通,你这篇文章等于是编程的扫盲贴,对于我们这些门外汉帮助太大了,再次鞠躬!
主题帖子积分
在线时间123 小时
主题帖子积分
在研究别人的地图代码时有些东西老是不理解,对LUA也只是有个模糊的概念理解,看完你这篇文章很多地方便 ...
你会3ds max啊? 我自学了一点,皮毛,以后有需要的地方不理赐教。
主题帖子积分
在线时间19 小时
主题帖子积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
Lv:2 长袍法师, 积分 217, 距离下一级还需 83 积分
你会3ds max啊? 我自学了一点,皮毛,以后有需要的地方不理赐教。
积极宣传本站,为本站带来更多注册会员
阿哈利姆魔法隐修议会之成员。
这是一位毁人不倦的教程编写者。
在曾经的知识荒原上,闪耀着他开拓的脚印。
黑科技玩的6
搞的仅是些奇奇怪怪的玩意儿。
Powered by

我要回帖

更多关于 求助大神这是什么歌2 的文章

 

随机推荐