High score in aus externem View speichern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • High score in aus externem View speichern

    Ich habe in einer eigenen View Klasse eine variable die ich gerne auf dem gerät speichern würde man soll sie also auch bei zweiten starten sehen können habe es schon mit SharedPreferences versucht leider stürtzt es hier immer ab

    Hierbei crasht esprivate val main: MainActivity = MainActivity()
    private var sharedPreferences: SharedPreferences = main.getSharedPreferences("highscore",Context.MODE_PRIVATE)
    LG VIncent

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Vincent1 ()

  • Hallo

    Ich denke du willst den Code von der MainActivty auslagern. In eine andere Klasse.

    Bist aber noch in der MainActivtyich meine du hast sie noch nicht beendet.

    MainActivity = MainActivity()

    Das ist das falsch egal wo in der Activty noch in der neuen Klasse.

    Du brachst in der neuen Klasse den Kontext der Activity, denn kannst du der Methode der neuen Klasse mitgeben.

    In der Activity musst du natürlich ein Objekt der neuen Kasse benutzen.

    Zeige mal wie du das machen willst. Mit sowenig Code kann keiner was sinnvolles anfangen.
    Ein Feedback auf Tipps ist auch schön. :P
  • Quellcode

    1. class Field (context: Context,attrs: AttributeSet): View(context, attrs){
    2. //COLORS AND STYLES
    3. private var textPaint: Paint = Paint(SYSTEM_UI_LAYOUT_FLAGS)
    4. private val spikePaint: Paint = Paint(SYSTEM_UI_LAYOUT_FLAGS)
    5. private val playerPaint: Paint = Paint(SYSTEM_UI_LAYOUT_FLAGS)
    6. private val scorePaint: Paint = Paint(SYSTEM_UI_LAYOUT_FLAGS)
    7. //ELSE
    8. private var spikes: ArrayList<Spike> = ArrayList()
    9. private var startX = 0
    10. private var startY = 0
    11. private val size = 80
    12. private var player: Player = Player(size)
    13. private var gameRunning: Boolean = false
    14. private var score: Int = 0
    15. private var spikeSize = 50f
    16. private var nextSpike: Int = 0
    17. var goOut: Boolean = false
    18. private var oldScore: Int = 0
    19. private var highScore: Int = 0
    20. init {
    21. scorePaint.color = Color.BLACK
    22. scorePaint.textSize = 60f
    23. textPaint.color = Color.BLACK
    24. textPaint.textSize = 80f
    25. textPaint.textAlign = Paint.Align.CENTER
    26. playerPaint.color = Color.argb(150,0,0,255)
    27. }
    28. override fun onTouchEvent(e: MotionEvent): Boolean {
    29. when(e.action){
    30. MotionEvent.ACTION_MOVE ->{
    31. player.move(e.x.toInt(), e.y.toInt())
    32. postInvalidate()
    33. }
    34. MotionEvent.ACTION_DOWN ->{
    35. if(!gameRunning){
    36. score = 0
    37. }
    38. gameRunning = true
    39. }
    40. }
    41. return true
    42. }
    43. override fun onDraw(canvas: Canvas) {
    44. super.onDraw(canvas)
    45. canvas.drawColor(Color.argb(100,173, 216, 230))
    46. if (gameRunning) {
    47. startX = width / 2
    48. startY = height / 2
    49. if (score == nextSpike){
    50. spikes.add(Spike((150..500).random().toFloat(),(200..700).random().toFloat(),spikeSize))
    51. nextSpike += 200
    52. }
    53. if(spikes.size == 0){
    54. spikes.add(Spike((150..500).random().toFloat(),(200..700).random().toFloat(),spikeSize))
    55. }
    56. if((0..100).random() < 65){
    57. score++
    58. }
    59. canvas.drawText("Score: $score",20f,50f,scorePaint)
    60. canvas.drawRect(player.rect, playerPaint)
    61. for (i in spikes) {
    62. i.move(canvas)
    63. if (colusionDetection(i,player,this)){
    64. gameRunning = false
    65. }
    66. if(i.isExtra) {
    67. spikePaint.color = Color.argb(200,205,20,147)
    68. }else{
    69. spikePaint.color = Color.BLACK
    70. }
    71. canvas.drawOval(i.oval, spikePaint)
    72. if (goOut){
    73. goOut = false
    74. break
    75. }
    76. }
    77. postInvalidate()
    78. }else{
    79. oldScore = score
    80. resetGame(canvas)
    81. }
    82. }
    83. fun resetGame(canvas: Canvas){
    84. canvas.drawText("Tap to Start",width/2.toFloat(),height/2-200.toFloat(),textPaint)
    85. canvas.drawText("Score : $oldScore",width/2.toFloat(),height/2.toFloat(),textPaint)
    86. canvas.drawRect(player.rect,playerPaint)
    87. player.move(width/2,height/2+200)
    88. nextSpike = 0
    89. spikes.clear()
    90. postInvalidate()
    91. }
    92. fun extraEvent(){
    93. spikes.clear()
    94. }
    95. }
    Alles anzeigen

    Quellcode

    1. class MainActivity : AppCompatActivity() {
    2. override fun onCreate(savedInstanceState: Bundle?) {
    3. super.onCreate(savedInstanceState)
    4. setContentView(R.layout.activity_main)
    5. }
    6. }
    Alles anzeigen
    Hier die beiden classen die main und die wo ich den highscore speichern und auch abrufen möchte...
  • mal erlich was soll das du wisst am anfang deines Threads auf SharedPreference zugreifen. da finde ich nichts in deinem code ausser eine Klasse die von View abgelleitet wird.


    MainActivity = MainActivity()
    private var sharedPreferences: SharedPreferences = main.getSharedPreferences("highscore",Context.MODE_PRIVATE)

    war der Anfang


    Du hast in der view Klasse doch denn Kontext der activity.
    Den nimmst Du um auf die sheredpref zu zugreifen.
    Das ist Deine Instanz der activity.
    Eine neues Objekt der activity zu erstellen ist falsch. OOP
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Nein du hast nicht aufgepasst den Context hast du schon wird dir in der Klasse im primer Kostrucktor mit übergeben.

    class Field (context: Context, attrs: AttributeSet): View(context, attrs)

    die abgeleitete View „Field“ hast du bestimmt in deinem Layout benutz. Und das bindest du in der Activity mittels setContentView ein und genau da wird die Instanz der Kalssse erstellt und ihr wird der Context der Activity übergeben.

    Wo du das machst bleibt dir überlassen .
    var sharedPreferences: SharedPreferences = context.getSharedPreferences("highscore",Context.MODE_PRIVATE)
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Wenn du nicht weist was diese Zeile in Kotlin alles macht.

    class Field (context: Context, attrs: AttributeSet)

    Solltest du dir Kotlin genauer anschauen, vor allen wie die ausführliche Schreibweise aussieht .

    In Java ist das Ganze mit getter und setter noch mehr Schreibarbeitdas hat Kotlin alles schon für dich gemacht.

    Das was in dem komprimierten Konstruktor ist sind Klassen Variablen.
    Ein Feedback auf Tipps ist auch schön. :P