如何在Corona SDK中实现小矩形锚定在大矩形右上角?
嘿,我来帮你搞定这个问题!你现在的代码里有几个容易犯的小错误,而且对Corona SDK里锚点(anchors)的用法可能有点混淆,我一步步给你理清楚:
先修正代码里的明显错误
- 填充颜色设置错了对象:你给小矩形设置黄色的时候,不小心写了
bigRectangle:setFillColor(...),这会把大矩形改成黄色,而小矩形还是默认的白色(可能你都看不到它在哪),应该改成smallRectangle:setFillColor(...)。 - 屏幕中心变量的问题:代码里的
_X和_Y如果没提前定义的话会报错,Corona里推荐用官方的display.contentCenterX和display.contentCenterY来获取屏幕中心坐标。 - 颜色值可以简化:
255/255其实就是1,直接写1更简洁,比如黄色可以写成setFillColor(1,1,0)。
用锚点把小矩形放在大矩形右上角的两种方法
Corona里每个显示对象的锚点默认是(0.5, 0.5)(对象中心),我们可以通过调整锚点或者利用父子对象的坐标系统来实现需求:
方法一:直接计算全局坐标(适合独立对象)
先算出大矩形右上角的全局坐标,再把小矩形定位过去:
-- 定义屏幕中心 local centerX = display.contentCenterX local centerY = display.contentCenterY -- 创建大矩形,放在屏幕中心 local bigRectangle = display.newRect(centerX, centerY, 320, 400) bigRectangle:setFillColor(0, 0, 1) -- 蓝色 -- 创建小矩形 local smallRectangle = display.newRect(0, 0, 20, 20) smallRectangle:setFillColor(1, 1, 0) -- 黄色 -- 计算大矩形右上角的全局坐标:中心X + 宽度一半,中心Y - 高度一半(Corona Y轴向下为正) local bigRightTopX = bigRectangle.x + bigRectangle.width/2 local bigRightTopY = bigRectangle.y - bigRectangle.height/2 -- 方案A:小矩形锚点保持默认(中心),让小矩形中心对齐大矩形右上角 smallRectangle.x = bigRightTopX smallRectangle.y = bigRightTopY -- 方案B:把小矩形锚点设为右上角(1, 0),让小矩形的右上角刚好对齐大矩形右上角 -- smallRectangle.anchorX = 1 -- smallRectangle.anchorY = 0 -- smallRectangle.x = bigRightTopX -- smallRectangle.y = bigRightTopY
方法二:嵌套父子对象(更灵活,适合跟随大矩形移动的场景)
把小矩形设为大矩形的子对象,这样小矩形的坐标会跟随大矩形的位置变化,不用重新计算:
local centerX = display.contentCenterX local centerY = display.contentCenterY local bigRectangle = display.newRect(centerX, centerY, 320, 400) bigRectangle:setFillColor(0, 0, 1) local smallRectangle = display.newRect(0, 0, 20, 20) smallRectangle:setFillColor(1, 1, 0) -- 把小矩形变成大矩形的子对象,此时小矩形的坐标是相对于大矩形的中心(大矩形锚点默认是中心) bigRectangle:insert(smallRectangle) -- 在大矩形的局部坐标里,右上角的位置是(宽度一半, -高度一半) -- 把小矩形的锚点设为右上角(1, 0),然后定位到这个位置 smallRectangle.anchorX = 1 smallRectangle.anchorY = 0 smallRectangle.x = bigRectangle.width/2 smallRectangle.y = -bigRectangle.height/2
锚点的小科普
anchorX和anchorY的取值范围是0到1:
(0, 0)= 对象左上角(1, 1)= 对象右下角(0.5, 0.5)= 对象中心(默认)
设置对象的x和y时,其实是在设置锚点的位置,所以调整锚点可以让定位更符合你的直觉~
内容的提问来源于stack exchange,提问作者QuestionEverything
相关产品推荐
相关产品推荐

