提问人:Alvaro Martinez 提问时间:5/3/2022 最后编辑:Phil DukhovAlvaro Martinez 更新时间:5/5/2022 访问量:274
我不明白为什么这种可变状态不起作用
I don't understand why this mutable state doesn't work
问:
我有一个表格地图,我想检测其中 2 个表格何时发生冲突(因为可以通过拖放移动表格)。当它们碰撞时,我也想改变它们的颜色,但我的可变状态不起作用
启动可组合项,为每个表创建一个Table
TableItem
CustomSurface{
Box(
modifier = Modifier
.fillMaxSize()
.onSizeChanged { size.value = it.toSize() }
){
mapScreenViewModel.tables.forEach {
TableItem(table = it, size = size, mapScreenViewModel = mapScreenViewModel)
}
}
}
TableItem
可组合的类有一个参数背景,它是 Color 的可变状态Table
@Composable
fun TableItem(
table: Table, size: MutableState<Size>, mapScreenViewModel: MapScreenViewModel
){
val offsetX = remember { mutableStateOf(table.x) }
val offsetY = remember { mutableStateOf(table.y) }
Box(
Modifier[...]
.background(table.background)
[...]
mapScreenViewModel.tables.filter { it != table }.forEach {
if(table collide it){
table.setCollidingColor()
it.setCollidingColor()
}else{
table.setNotCollidingColor()
it.setNotCollidingColor()
}
}
[...]
Table
类,背景在外部声明constructor
class Table(
[...]
) {
var background by mutableStateOf(BlueDayLight)
fun setCollidingColor() {
background = Red500
}
fun setNotCollidingColor() {
background = BlueDayLight
}
infix fun collide(table: Table): Boolean {
return this.x < table.x + table.width.toPx
&& this.x + this.width.toPx > table.x
&& this.y < table.y + table.height.toPx
&& this.y + this.height.toPx > table.y
}
}
答: 暂无答案
评论