退出函数的方法(10.26)

本文介绍如何在Cocos2d-x中管理和释放资源,包括图片和精灵的加载与释放方法,通过设置tag值来标识游戏元素,并利用CCActionManager检查目标上的运行动作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接让函数return 一个空值,return出去,离开函数

 

 

释放图片的时候使用release,释放精灵的时候使用remove

eg:

image释放

 

UIImage *image =[[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"bg_game_on" ofType:@"png"]];

CCTexture2D *_texture = [[CCTexture2D alloc] initWithImage:image];

[(CCSprite*)[self getChildByTag:_TAG_GAMEBG] setTexture:_texture];

[image release];

[_texture release];

 

 

精灵释放:

加载:

 

CCSprite *mobile_bf = (CCSprite*)[self getChildByTag:_tag_SBF];

if (!mobile_bf) {

MobileNode *mobile_bf=[MobileNode MobileNodeRole:_mobilenum[3] type:3];

[self addChild:mobile_bf z:4 tag:_tag_SBF];

}

 

 

释放:

 

[self removeChildByTag:_tag_SBF cleanup:YES];

CCSprite *sp=(CCSprite*)[self getChildByTag:_tag_SBF];

 

 

 

 

设置tag值  

eg:

 

id action=[[GameLogic ShareGameLogic] Get_animate:42];

[action setTag:_tag_action];

 

 

 

[[CCActionManager sharedManager] numberOfRunningActionsInTarget:[self getChildByTag:_tag_move]]得到的可能是int型或者Bool型

[[CCActionManager sharedManager] numberOfRunningActionsInTarget:[self getChildByTag:_tag_move]]>0得到BOOL值,当为yes时,则有程序在运行,否则没有在运行

eg:BOOL _istouchmoveing = [[CCActionManager sharedManager] numberOfRunningActionsInTarget:[self   getChildByTag:_tag_move]]>0 ;

if (!_istouchmoveing) {

MoveNode *move = [MoveNode MoveNodeRole:0];

move.delegate = self;

[self addChild:move z:4 tag:_tag_move ];

}

 

 

我是新手,详细说明这段代码的功能,解释每段语句功能void Control_AN_PS() { //操作方法....连续按下3S,开始排空。松开超过1S后,再次按下,连续按下5S取消排空 if(AN==1)//2.24.10.26防止退出按钮排空后,立马又进入按钮排空 { Lock_ANPS=0; } if(AN_SS_state==1)//用于取消 { if(AN==0)//按钮排空开始后,连续按5S停止排空 { AN_TIME_Enable=1;//Enable dewatering button press down timer if(AN_TIME_NUM>(61*5))//5s { AN_TIME_Enable=0;//Disable dewatering button press down timer AN_TIME_NUM=0;//Reset count value of button press down AN_SS_state=0; AnNiu_PS_No=1; //按钮排空中途停止标志 AnNiu_PS_Yes=0; Lock_ANPS=1;//取消后上锁,松开再按才能进入排水模式,防止马上又进入按钮排水模式 } } else { AN_TIME_Enable=0; AN_TIME_NUM=0; } } else { if(AN_SS==1)//按下5S标志位 { if(AN==1)//按钮松开1S后 { AN_TIME_Enable=1; if(AN_TIME_NUM>(61))//松开超过1S { AN_TIME_Enable=0; AN_TIME_NUM=0; AN_SS=0; AN_SS_state=1;//SS signal is conformed } } else { AN_TIME_Enable=0; AN_TIME_NUM=0; } } else { if(AnNiu==1)//按钮按下标志位 { if(AN==0)//连续3S检测按钮有效 { AN_TIME_Enable=1; if(AN_TIME_NUM>(61*3) && Lock_ANPS==0)//再次检测3S { AN_TIME_Enable=0; AN_TIME_NUM=0; AnNiu_PS_Yes=1;//按钮排空动作标志 AnNiu_PS_No=0; AnNiu=0;// AN_SS=1;// } } else { AN_TIME_Enable=0; AN_TIME_NUM=0; AN_SS=0;// } } else//按下标志位未置位 { if(AN==0)//0.1s延时检测到按钮信号,按下为0 { AN_TIME_Enable=1;//按下计时器 if(AN_TIME_NUM>6)//0.1s { AN_TIME_Enable=0;// AN_TIME_NUM=0;// AnNiu=1;//按钮按下标志位置位 } } else { AN_TIME_Enable=0;//关闭按钮定时器使能 AN_TIME_NUM=0;//复位按下按钮的计数值 AnNiu=0;//按钮按下标志位复位 } } } } }
06-12
function JD() % 初始猜测值 x0 = [0, 0, -3.2058, -5.5526, -3.2058, -8.7, -6.1129, -8.7, -12.5928, -8.7, … -15.5176, -10.26, -17.1648, -7.1718, -14.24, -5.6118, -12, 0, -16.3412, -8.7159, 2]'; % 设置求解参数 tol = 1e-4; % 收敛容差 max_iter = 50; % 最大迭代次数 h = 1e-4; % 数值微分步长 % 初始化变量 x = x0; iter = 0; converged = false; % 牛顿迭代主循环 while iter < max_iter && ~converged % 计算当前函数值 F = equations(x); res_norm = norm(F); % 打印当前迭代信息 fprintf('迭代步 %d:\n', iter); fprintf('变量值: ['); fprintf('%.8f ', x); fprintf(']\n'); fprintf('残差范数: %.8f\n\n', norm(equations(x))); % 检查收敛条件 if res_norm < tol converged = true; fprintf('\nConvergence achieved at iteration %d!\n', iter); break; end % 数值计算雅可比矩阵 J = compute_jacobian(@equations, x, h); % 求解线性方程组 J*dx = -F dx = J \ (-F); % 更新解向量 x = x + dx; iter = iter + 1; end % 最终结果输出 fprintf('\n======= 迭代结束 =======\n'); if converged fprintf('在 %d 次迭代后收敛\n', iter-1); else fprintf('达到最大迭代次数未收敛\n'); end end function F = equations(x) % 从输入向量解包变量 x1 = x(1); y1 = x(2); x2 = x(3); y2 = x(4); x3 = x(5); y3 = x(6); x4 = x(7); y4 = x(8); x5 = x(9); y5 = x(10); x6 = x(11); y6 = x(12); x7 = x(13); y7 = x(14); x8 = x(15); y8 = x(16); x9 = x(17); y9 = x(18); x10 = x(19); y10 = x(20); R = x(21); % 初始化方程组 (21个方程) F = zeros(21,1); % 1. 固定约束: P0在原点 F(1) = x1; F(2) = y1; % 2. 几何约束 F(3) = x3 - x2; % P2和P3横坐标相同 F(4) = y4 - y3; % P3和P4纵坐标相同 F(5) = y5 - y4; % P4和P5纵坐标相同 F(6) = (y6 - y5)*(x10 - x1) - (y10 - y1)*(x6 - x5); % 5-6和1-10平行 F(7) = (y6 - y5)*(x7 - x8) - (y7 - y8)*(x6 - x5); % 6-5和7-8平行 F(8) = y9 - y1; % P1和P9纵坐标相同 F(9) = (y8 - y9)*(x2 - x1) - (y2 - y1)*(x8 - x9); % 1-2和9-8平行 F(10) = (y5 - y3)*(x9 - x1) - (y9 - y1)*(x5 - x3); % 3-5和1-9平行 % 3. 尺寸约束 F(11) = (x2 - x1)^2 + (y2 - y1)^2 - (x8 - x9)^2 - (y8 - y9)^2; % 杆长相等 F(12) = (x6 - x5)^2 + (y6 - y5)^2 - (x7 - x8)^2 - (y7 - y8)^2; % 杆长相等 F(13) = x3 - x4 - 2.91; % 水平距离 F(14) = y3 + 8.7; % 垂直位置约束 (注意符号) F(15) = R - 2; % 圆弧半径=2 % 4. 圆弧属性方程 F(16) = (x6 - x10)^2 + (y6 - y10)^2 - R^2; % P6在圆弧上 F(17) = (x7 - x10)^2 + (y7 - y10)^2 - R^2; % P7在圆弧上 % 5. 相切约束 F(18) = (x6 - x10)*(x6 - x5) + (y6 - y10)*(y6 - y5); % 圆弧与杆5-6垂直 F(19) = (x7 - x10)*(x7 - x8) + (y7 - y10)*(y7 - y8); % 圆弧与杆7-8垂直 % 6. 全局尺寸约束 F(20) = x1 - x9 - 12; % 水平距离 F(21) = 4*((x2 - x1)*(x9 - x1) + (y2 - y1)*(y9 - y1))^2 - ... ((x2 - x1)^2 + (y2 - y1)^2)*((x9 - x1)^2 + (y9 - y1)^2); % 角度约束 end function J = compute_jacobian(func, x, h) % 数值计算雅可比矩阵 n = length(x); F0 = feval(func, x); m = length(F0); J = zeros(m, n); % 使用中心差分法计算偏导数 for i = 1:n x_temp = x; x_temp(i) = x(i) + h; F_plus = feval(func, x_temp); x_temp(i) = x(i) - h; F_minus = feval(func, x_temp); J(:, i) = (F_plus - F_minus) / (2*h); end end 给改代码添加正则化,解决矩阵接近奇异值或者缩放不良的问题
最新发布
07-20
function JD() % 初始猜测值 x0 = [0, 0, -3.2058, -5.5526, -3.2058, -8.7, -6.1129, -8.7, -12.5928, -8.7, ... -15.5176, -10.26, -17.1648, -7.1718, -14.24, -5.6118, -12, 0, -16.3412, -8.7159, 2]'; % 设置求解参数 tol = 1e-4; % 收敛容差 max_iter = 50; % 最大迭代次数 h = 1e-7; % 数值微分步长 % 初始化变量 x = x0; iter = 0; converged = false; % 牛顿迭代主循环 while iter < max_iter && ~converged % 计算当前函数值 F = equations(x); res_norm = norm(F); % 打印当前迭代信息 fprintf('迭代步 %d:\n', iter); fprintf('变量值: ['); fprintf('%.8f ', x); fprintf(']\n'); fprintf('残差范数: %.8f\n\n', norm(equations(x))); % 检查收敛条件 if res_norm < tol converged = true; fprintf('\nConvergence achieved at iteration %d!\n', iter); break; end % 数值计算雅可比矩阵 J = compute_jacobian(@equations, x, h); % 求解线性方程组 J*dx = -F dx = J \ (-F); % 更新解向量 x = x + dx; iter = iter + 1; end % 最终结果输出 fprintf('\n======= 迭代结束 =======\n'); if converged fprintf('在 %d 次迭代后收敛\n', iter-1); else fprintf('达到最大迭代次数未收敛\n'); end end function F = equations(x) % 从输入向量解包变量 x1 = x(1); y1 = x(2); x2 = x(3); y2 = x(4); x3 = x(5); y3 = x(6); x4 = x(7); y4 = x(8); x5 = x(9); y5 = x(10); x6 = x(11); y6 = x(12); x7 = x(13); y7 = x(14); x8 = x(15); y8 = x(16); x9 = x(17); y9 = x(18); x10 = x(19); y10 = x(20); R = x(21); % 初始化方程组 (21个方程) F = zeros(21,1); % 1. 固定约束: P0在原点 F(1) = x1; F(2) = y1; % 2. 几何约束 F(3) = x3 - x2; % P2和P3横坐标相同 F(4) = y4 - y3; % P3和P4纵坐标相同 F(5) = y5 - y4; % P4和P5纵坐标相同 F(6) = (y6 - y5)*(x10 - x1) - (y10 - y1)*(x6 - x5); % 5-6和1-10平行 F(7) = (y6 - y5)*(x7 - x8) - (y7 - y8)*(x6 - x5); % 6-5和7-8平行 F(8) = y9 - y1; % P1和P9纵坐标相同 F(9) = (y8 - y9)*(x2 - x1) - (y2 - y1)*(x8 - x9); % 1-2和9-8平行 F(10) = (y5 - y3)*(x9 - x1) - (y9 - y1)*(x5 - x3); % 3-5和1-9平行 % 3. 尺寸约束 F(11) = (x2 - x1)^2 + (y2 - y1)^2 - (x8 - x9)^2 - (y8 - y9)^2; % 杆长相等 F(12) = (x6 - x5)^2 + (y6 - y5)^2 - (x7 - x8)^2 - (y7 - y8)^2; % 杆长相等 F(13) = x3 - x4 - 2.91; % 水平距离 F(14) = y3 + 8.7; % 垂直位置约束 (注意符号) F(15) = R - 2; % 圆弧半径=2 % 4. 圆弧属性方程 F(16) = (x6 - x10)^2 + (y6 - y10)^2 - R^2; % P6在圆弧上 F(17) = (x7 - x10)^2 + (y7 - y10)^2 - R^2; % P7在圆弧上 % 5. 相切约束 F(18) = (x6 - x10)*(x6 - x5) + (y6 - y10)*(y6 - y5); % 圆弧与杆5-6垂直 F(19) = (x7 - x10)*(x7 - x8) + (y7 - y10)*(y7 - y8); % 圆弧与杆7-8垂直 % 6. 全局尺寸约束 F(20) = x1 - x9 - 12; % 水平距离 F(21) = 4*((x2 - x1)*(x9 - x1) + (y2 - y1)*(y9 - y1))^2 - ... ((x2 - x1)^2 + (y2 - y1)^2)*((x9 - x1)^2 + (y9 - y1)^2); % 角度约束 end function J = compute_jacobian(func, x, h) % 数值计算雅可比矩阵 n = length(x); F0 = feval(func, x); m = length(F0); J = zeros(m, n); % 使用中心差分法计算偏导数 for i = 1:n x_temp = x; x_temp(i) = x(i) + h; F_plus = feval(func, x_temp); x_temp(i) = x(i) - h; F_minus = feval(func, x_temp); J(:, i) = (F_plus - F_minus) / (2*h); end end 进行修改,解决矩阵接近奇异值或者缩放不良的问题
07-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值