HTML, CSS och Javascript: Skillnad mellan sidversioner

Från Wikiskola
Hoppa till navigering Hoppa till sök
 
(12 mellanliggande sidversioner av samma användare visas inte)
Rad 185: Rad 185:
Skapa en egen funktion som räknar ut något på samma sätt.
Skapa en egen funktion som räknar ut något på samma sätt.


=== Lägg in funktioner i Husbilden ===
Du kan använda funktioner för att förenkla koden i din husbild. Du kan arbeta på detta sätt när du skapar nya bilder, exempelvis en figur (gubbe) till ett kommande spel.


{{uppgruta | '''Funktioner förenklar - skapa en gubbe'''
{{uppgruta | '''Funktioner förenklar - skapa en gubbe'''
Rad 222: Rad 225:
this.myRectangle(50, 20, 50, 70, "Green");
this.myRectangle(50, 20, 50, 70, "Green");
this.myRectangle(90, 200, 50, 70, "Red");
this.myRectangle(90, 200, 50, 70, "Red");
</script>
</body>
</html>
</pre>
}}
=== Använd variabler till funktionerna ===
I exemplet nedan har vi lagt till variabler för att styra var de röda rektanglarna hamnar.
{{Lista | Variabler och funktioner
<pre>
<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="400" height="500"
style="border:1px solid #d3d3d3;">
Your browser does not support the canvas element.
</canvas>
<script>
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var startX = 40;
var startY = 40;
var distX = 80;
var distY = 110;
var bredd = 50;
function myRectangle(x, y, w, l, color) {
ctx.fillStyle = color;
ctx.fillRect(x, y, w, l);
}
this.myRectangle(startX, startY, bredd, 70, "Red");
this.myRectangle(startX + distX, startY, bredd, 70, "Red");
this.myRectangle(startX + 2*distX, startY, bredd, 70, "Red");
this.myRectangle(startX, startY + distY, bredd, 70, "Red");
this.myRectangle(startX + distX, startY + distY, bredd, 70, "Red");
this.myRectangle(startX + 2*distX, startY + distY, bredd, 70, "Red");
</script>
</script>


Rad 981: Rad 1 027:
{{clear}}
{{clear}}


== Gör ett ritprogram ==
== Andra plattformar för spelutveckling (med Javascript) ==
 
[[Fil:Ritprogram1.PNG|400px|höger]]
 
Med följande kod kan du rita på canvas med muspekaren. Det gör att du kan bygga ett Paintliknade program. Nedan finns ett exempel men det kommer fler. Koden behöver städas lite också :-)
 
{{Lista |
<pre>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<style>
body {
    margin: 0;
}
canvas {
    border:1px solid #d3d3d3;
    background-color: #f1f1f1;
}
</style>
</head>
<body onload="startGame()">
<script>
var myGamePiece;
var myUpBtn;
var myDownBtn;
var myLeftBtn;
var myRightBtn;
 
function startGame() {
    myGamePiece = new component(30, 30, "red", 10, 120);
    myUpBtn = new component(30, 30, "blue", 50, 10);   
    myDownBtn = new component(30, 30, "blue", 50, 70);   
    myLeftBtn = new component(30, 30, "blue", 20, 40);   
    myRightBtn = new component(30, 30, "blue", 80, 40);               
    myGameArea.start();
}


 
* [http://phaser.io Phaser]
var myGameArea = {
* [http://processingjs.org/ Processing]
    canvas : document.createElement("canvas"),
    start : function() {
        this.canvas.width = 480;
        this.canvas.height = 270;
        this.context = this.canvas.getContext("2d");
        document.body.insertBefore(this.canvas, document.body.childNodes[0]);
        this.interval = setInterval(updateGameArea, 20);
        window.addEventListener('mousedown', function (e) {
            myGameArea.x = e.pageX;
            myGameArea.y = e.pageY;
        })
        window.addEventListener('mouseup', function (e) {
            myGameArea.x = false;
            myGameArea.y = false;
        })
        window.addEventListener('touchstart', function (e) {
            myGameArea.x = e.pageX;
            myGameArea.y = e.pageY;
        })
        window.addEventListener('touchend', function (e) {
            myGameArea.x = false;
            myGameArea.y = false;
        })
    },
    clear : function(){
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
    }
}
 
function component(width, height, color, x, y) {
    this.width = width;
    this.height = height;
    this.speedX = 0;
    this.speedY = 0;
    this.x = x;
    this.y = y;   
    this.update = function() {
        ctx = myGameArea.context;
        ctx.fillStyle = color;
      ctx.fillRect(this.x, this.y, this.width, this.height);
    }
    this.clicked = function() {
        var myleft = this.x;
        var myright = this.x + (this.width);
        var mytop = this.y;
        var mybottom = this.y + (this.height);
        var clicked = true;
        if ((mybottom < myGameArea.y) || (mytop > myGameArea.y) || (myright < myGameArea.x) || (myleft > myGameArea.x)) {
            clicked = false;
        }
        return clicked;
    }
}
 
function updateGameArea() {
//   myGameArea.clear();
    if (myGameArea.x) {
        myGamePiece = new component(30, 30, "green", myGameArea.x, myGameArea.y);
   
        if (myUpBtn.clicked()) {
        //    myGamePiece.y -= 1;
        }
        if (myDownBtn.clicked()) {
        //   myGamePiece.y += 1;
        }
        if (myLeftBtn.clicked()) {
        //    myGamePiece.x += -1;
        }
        if (myRightBtn.clicked()) {
        //    myGamePiece.x += 1;
        }
    }
    myUpBtn.update();       
    myDownBtn.update();       
    myLeftBtn.update();       
    myRightBtn.update();                               
    myGamePiece.update();
}
 
</script>
 
<p>Click on the blue "buttons" to make the red square move.</p>
</body>
</html>
</pre>}}
 
{{clear}}


= Ritprogrammet =
= Ritprogrammet =
Rad 1 119: Rad 1 041:


== Kod för ritprogrammet ==
== Kod för ritprogrammet ==
Programmet nedan är ett halvfärdigt ritprogram. Din uppgift är att förbättra det. Du använder kanske anteckningar eller så har du en redigerare som exempelvis Atom. Börja med att skapa två filer; en index.html och en main.js. Koden hittar du nedan.
Testkör programmet och se vad det kan. Du klickar för att rita. Undersök koden för att hitta vilka delar av programmet som gör vad. Du behöver inte förstå hur all kod fungerar.
Programmet kan byta färg när man trycker en tangent och det går att ändra radien. Dessutom finns en mouse over-funktion.


{{uppgruta | '''Ritprogrammet'''
{{uppgruta | '''Ritprogrammet'''
Rad 1 156: Rad 1 084:
{{Lista | main.js
{{Lista | main.js
<pre>
<pre>
// Thanks to Jagadesha NH:  
// Thanks to Jagadesha NH:
// https://medium.com/@jagadeshanh/html5-canvas-click-and-draw-f665e02f5744
// https://medium.com/@jagadeshanh/html5-canvas-click-and-draw-f665e02f5744


Rad 1 164: Rad 1 092:
var width = canvas.width = window.innerWidth;
var width = canvas.width = window.innerWidth;
var mouseClicked = false, mouseReleased = true;
var mouseClicked = false, mouseReleased = true;
var  x0 = 50;
  y0 = 30;
  bredd =40;
  hojd = 40;
  distance = 40;
  color = "green";
  radie = 10;
  size = 22;
document.addEventListener("click", onMouseClick, false);
document.addEventListener("click", onMouseClick, false);
document.addEventListener("mousemove", onMouseMove, false);
document.addEventListener("mousemove", onMouseMove, false);
Rad 1 172: Rad 1 109:
     if (mouseClicked) {
     if (mouseClicked) {
         context.beginPath();
         context.beginPath();
         context.arc(e.clientX, e.clientY, 7.5, 0, Math.PI * 2, false);
         context.arc(e.clientX, e.clientY, radie, 0, Math.PI * 2, false);
         context.lineWidth = 5;
         context.lineWidth = 5;
         context.strokeStyle = color;
         context.strokeStyle = color;
         context.stroke();
         context.stroke();
     }
     }
//en mouse over-funktion
if ((e.clientX > x0) && (e.clientX < x0 + bredd) && (e.clientY > y0)
      && (e.clientY < y0 + hojd))  { color = "green"; }
}
}


// Här börjar koden inspirerad av spelprogrammering.nu
// Här börjar koden inspirerad av spelprogrammering.nu
  var  x0 = 50;
    y0 = 30;
    bredd =40;
    hojd = 40;
    distance = 40;
    color = "green";
    radie = 10;
size = 22;


function myRectangle(x, y, w, l, color)  
 
function myRectangle(x, y, w, l, color)
{
{
   context.fillStyle = color
   context.fillStyle = color
   context.fillRect(x, y, w, l);
   context.fillRect(x, y, w, l);
}
function myCircle(x, y, r, t, color)
{
  context.beginPath();
  context.arc(x,y,r,t, 2.2*Math.PI);
  context.fillStyle = color;
  context.fill();
}
}


Rad 1 210: Rad 1 135:
}
}


// rita de färgade rutorna
// rita de f?rgade rutorna
   this.myRectangle(x0, y0, bredd, hojd, "green");  
   this.myRectangle(x0, y0, bredd, hojd, "green");
   this.myRectangle(x0, y0 + distance, bredd, hojd, "blue");
   this.myRectangle(x0, y0 + distance, bredd, hojd, "blue");
   this.myText(x0-30, y0 + distance+25, 18, "b", "blue");
   this.myText(x0-30, y0 + distance+25, 18, "b", "blue");
Rad 1 217: Rad 1 142:
   this.myRectangle(x0, y0 + 3 * distance, bredd, hojd, "pink");
   this.myRectangle(x0, y0 + 3 * distance, bredd, hojd, "pink");


  // välj färg att rita med
// v?lj f?rg att rita med
window.addEventListener('keydown',this.check,false);
window.addEventListener('keydown',this.check,false);


Rad 1 225: Rad 1 150:


function check(e) {
function check(e) {
     var code = e.keyCode;
     var code = e.keyCode
 
// Ändra färg
     if (code == 37)
     if (code == 71)
        color = "yellow";   
         color = "green";
    if (code == 38)
     if (code == 66)
         color = "green";     //Up arrow pressed
     if (code == 39)
         color = "blue";
         color = "blue";
     if (code == 40)
     if (code == 89)
         color = "red";
         color = "yellow";
    if (code == 80)
        color = "pink";
// Ändra radie
if (code == 49)
    radie = 5;
if (code == 50)
    radie = 10;
}
}
</pre>
</pre>
}}
}}


=== Exempel ===


 
: Ett [https://19huhe.ssis.nu/ritprogram/ ritprogram] av Hugo Helm
 
: Ett [https://19thli.ssis.nu/wp-content/uploads/2019/09/index.html ritprogram] av Theresia Lindahl.
<headertabs />
<headertabs />

Nuvarande version från 21 november 2019 kl. 22.07

[redigera]
Mål för undervisningen

Vi kommer att arbeta med Ci 1, dvs det centrala innehållet1:

Teknikutvecklingsprocessens alla delar från idé och modell, produkt eller tjänst till användning och återvinning med praktisk tillämpning av teknik och teknikutveckling inom ett eller flera teknikområden.

Ni kommer att kunna visa förmåga:

3. Förmåga att lösa tekniska problem.
6. Kunskaper om hur teknik har utvecklats och utvecklas i samspel med det omgivande samhället samt kunskaper om befintlig teknik och aktuell teknikutveckling.


Som intro kan man titta på några olika exempelsidor med enkel kodning samt några platser där man kan lära sig koda. Utforska gärna detta på egen hand.

Intro till Turtle Logo programmering
Scratch
Lär dig programmera genom att spela spel
Codecademy
Teori - programmering med en presentation.

Editors

Det finns en editor att ladda ner som heter TextWrangler och den fungerar bra men länkarna nedan går till moderna editorer. Testa dig fram så du hittar vad som passar dig bäst.

TryIt Editor klicka på den gröna Try it-knappen.
Atom är ett bra verktyg för att koda med färg.
TextWrangler Traditinellt verktyg för textredigering. (Mac)
Brackets
CodePen