Jetpack Compose МультитачAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Jetpack Compose Мультитач

Сообщение Anonymous »


I want to implement these states:

00 if no one is touching 10 if player 1 is only touching 01 if player 2 is only touching 11 if both player 1 and 2 is touching There must also be a variable that takes note who touches first P1. if Player 1 touched first P2. if Player 2 touched first.

Take note: if the state is 11 (both player 1 and 2 is touching) If one removes his hand regardless who touched first, the left hand has the state who touched first.


Изображение


Scenario:

Player 1 touched (state is 10 takes note that player 1 touched)

Player 2 touched (now the state is 11)

Player 1 removed the touch ( now the state is 01 and P2) (player 2 is the first to touch)

My problem is that it doesn't support multitouch. The state won't go to 11 even though I utilized my phone. What's the best method you know? Thank you.
import android.view.MotionEvent import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.pointer.pointerInteropFilter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.navigation.NavController import com.fabian.twov01.R import com.fabian.twov01.datasource.DataSource import androidx.compose.runtime.* @OptIn(ExperimentalComposeUiApi::class) @Composable fun TwoPlayersScreen(navController: NavController) { var touchState by remember { mutableStateOf("00") } // "00", "10", "01", "11" var firstTouch by remember { mutableStateOf("") } // "", "P1", "P2" Box(modifier = Modifier.fillMaxSize()) { // Background Image // Image( // painter = painterResource(id = R.drawable.mainmenu_bg), // contentDescription = "Background Image", // modifier = Modifier.fillMaxSize(), // contentScale = ContentScale.Crop // ) Column( modifier = Modifier .fillMaxSize() .padding(5.dp) ) { // LIFE, STATS, NAME Row Row( modifier = Modifier .fillMaxWidth() .background(color = Color.Magenta) .weight(.6f), // Adjust the weight as needed horizontalArrangement = Arrangement.SpaceBetween ) { //Player 1 stats Column( ) { Row( ) { //PLAYER ICON Image( painter = painterResource(id = R.drawable.exit), contentDescription = "Exit Icon", modifier = Modifier .size(50.dp), contentScale = ContentScale.Fit ) Column( ) { //LIFE LinearProgressIndicator( progress = 0.5f, modifier = Modifier .padding(top = 1.dp) .height(25.dp), color = Color.Green ) Text(text = "Wins: 0") } } Text(text = "Player 1") } //PAUSE AND PLAY Column( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, ) { Text(text = "2 Player Mode") Image( painter = painterResource(id = R.drawable.exit), contentDescription = "Exit Icon", modifier = Modifier .size(50.dp), contentScale = ContentScale.Fit ) Text(text = "Best of 3") } //Player 2 Stats Column( horizontalAlignment = Alignment.End ) { Row( ) { Column( horizontalAlignment = Alignment.End ) { //LIFE LinearProgressIndicator( progress = 0.5f, modifier = Modifier .padding(top = 1.dp) .height(25.dp), color = Color.Green ) Text(text = "Wins: 0") } //PLAYER ICON Image( painter = painterResource(id = R.drawable.exit), contentDescription = "Exit Icon", modifier = Modifier .size(50.dp), contentScale = ContentScale.Fit ) } Text(text = "Player 1") } } // Assuming this is the "STATE OF THE HAND BY DRAWABLES" Row Row( modifier = Modifier .fillMaxWidth() .background(color = Color.Gray) .weight(1.4f) // Adjust the weight as needed ) { // Player 1 control area Box( modifier = Modifier .weight(1f) .fillMaxHeight() .background(Color.DarkGray) .pointerInteropFilter { motionEvent -> when (motionEvent.action) { MotionEvent.ACTION_DOWN -> { touchState = if (touchState == "00" || touchState == "01") "10" else "11" if (firstTouch == "") firstTouch = "P1" } MotionEvent.ACTION_UP -> { touchState = if (touchState == "11") "01" else "00" if (firstTouch == "P1") firstTouch = if (touchState == "01") "P2" else "" } } true } ) // Player 2 control area Box( modifier = Modifier .weight(1f) .fillMaxHeight() .background(Color.LightGray) .pointerInteropFilter { motionEvent -> when (motionEvent.action) { MotionEvent.ACTION_DOWN -> { touchState = if (touchState == "00" || touchState == "10") "01" else "11" if (firstTouch == "") firstTouch = "P2" } MotionEvent.ACTION_UP -> { touchState = if (touchState == "11") "10" else "00" if (firstTouch == "P2") firstTouch = if (touchState == "10") "P1" else "" } } true } ) } // Debug Text - Displaying the current touch state and first touch Text("Touch State: $touchState, First Touch: $firstTouch") } } }

Источник: https://stackoverflow.com/questions/780 ... multitouch
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Мультитач в мобильном браузере?
    Гость » » в форуме Jquery
    0 Ответы
    29 Просмотры
    Последнее сообщение Гость
  • Input.touchCount не обнаруживает мультитач в iOS, но отлично работает для Android
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Отключить или запретить мультитач в «Активности»
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как отключить мультитач на Android P?
    Anonymous » » в форуме Android
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Счетчик касаний мультитач
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»